Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: загрузка файлов на сервер
 
 автор: nameivan   (02.12.2008 в 23:00)   письмо автору
 
 

При помощи данного скрипта загружем фотки на сервер.
if(copy($_FILES["Fot1"]["tmp_name"],
"foto/".$_FILES["Fot1"]["name"]))
{ echo("Файл успешно загружен <br>");}
else {
echo("Ошибка загрузки файла");
}

Работает. Но если имена загружемых файлов совпадут то произойдет перезапись файла. Как избежать перезаписи?

  Ответить  
 
 автор: sim5   (03.12.2008 в 05:49)   письмо автору
 
   для: nameivan   (02.12.2008 в 23:00)
 

Именуйте сами, как, вам виднее. Это может бить дата-время, это может быть id статьи/товара, которому будет пренадлежать фото. К имени можно добавлять порядковый номер, если изображений несколько и они пренадлежат одному объекту.
Только не используйте copy() при загрузке изображений/файлов, она использовалась в ранних версих РНР, сейчас для этого служит move_uploaded_file().

  Ответить  
 
 автор: nameivan   (03.12.2008 в 12:50)   письмо автору
 
   для: sim5   (03.12.2008 в 05:49)
 

Спасибо.
Все таи решено загружать файлы не в папку а в БД.
Данный фрагмент кодадолжен помещать джипеги в базу, Но не помещает и при этом оибок не выдает. С подобный впервые сталкнлся, помогите ожауйста разобратья

<?php
// Проверяем пришел ли файл
if(!empty($_FILES))
{
// Если файл пришел, то проверяем графический ли он (из соображений безопасности)
if(substr($_FILES['image']['type'], 0, 5)=='image')
{
// Читаем содержимое файла
$image=file_get_contents($_FILES['image']['tmp_name']);
// Экранируем специальные символы в содержимом файла
$image=mysql_escape_string($image);

$link=mysql_connect("localhost", "root", "") or die("Сервер не найден");

mysql_select_db("base") or die("Таблица не найдена");

$query="INSERT INTO `upload` (`file`) VALUES('".$_FILES['image']['tmp_name'].", '".$image."')";

mysql_query($query, $link);
echo mysql_error();
mysql_close($link);
}

}
?>

  Ответить  
 
 автор: sim5   (03.12.2008 в 13:03)   письмо автору
 
   для: nameivan   (03.12.2008 в 12:50)
 

Во-первых, не проверяйте тип файла графический он или нет по расширению. Во-вторых, перед записью удостоверьтесь что файл загружен на сервер. В третьих..., зачем вам это надо? Вы даже не удосуживаетесь проверять размеры файлов, которые вы загружаете. Если это маленькие аватарки, еще ладно, но стоит ли держать "гарфических монстров" в базе? Не лучше ли держать в базе имена файлов, путь к ним (лучше ссылку на конфигурацию), другие параметры изображения (если надо), а само изображения в папке?

  Ответить  
 
 автор: nameivan   (03.12.2008 в 15:37)   письмо автору
 
   для: sim5   (03.12.2008 в 13:03)
 

Убедили. И база не будет раздуваться, и работать будет быстрее. Вопрос в том как это реализовать? Я ранее с этим не сталкивался. Загрузил я файл в папку на сервере а как при этом ссылку на данный файл в БД записать?

  Ответить  
 
 автор: sim5   (03.12.2008 в 16:08)   письмо автору
 
   для: nameivan   (03.12.2008 в 15:37)
 

В этом разделе примеров загрузки файлов на сервер много, воспользуйтесь поиском. Посмотрите эти примеры, напишите на этих примерах свой код, и уже, если будут какие либо затруднения, тогда с вопросами на форум.

  Ответить  
 
 автор: nameIvan   (04.12.2008 в 09:33)   письмо автору
 
   для: sim5   (03.12.2008 в 16:08)
 

Данный код кидает файлец в папку и пререименовывает его чтоб совпадений в именах не было.
$dt = date("20Ymd");
srand((float) microtime()*1000000);
$lb = rand();
$gbl = $_FILES["Fot1"]["name"];
if(copy($_FILES["Fot1"]["tmp_name"], "images/".$_FILES["Fot1"]["name"]))
{ $f=$_FILES["Fot1"]["tmp_name"];

$link=mysql_connect("localhost", "root", "") or die("Сервер не найден");

mysql_select_db("base") or die("Таблица не найдена");
$query = "insert into upload (`file`) value ('$f')";
mysql_query($query, $link);

echo mysql_error();

mysql_close($link);
echo("Файл загружен");
}
else
{
echo("Ошибка загрузки файла");
}
$nn = $_FILES["Fot1"]["type"];
$str = $nn;
$exp = explode("/", $str);
rename("images/$gbl", "images/$dt$lb.$exp[1]");

В БД вписывается путь к файлу что то типа Z:mpphpA6.tmp
Это правильно? Или гдето ошибка?
При переименовывании файла расширение тоже меняется на .pjpeg.
Пожалуйста подскажите как теперь этот файл поместить на странице?

  Ответить  
 
 автор: Trianon   (04.12.2008 в 09:39)   письмо автору
 
   для: nameIvan   (04.12.2008 в 09:33)
 

Так а зачем Вы в базу-то кладете временный путь?

Извращение с именем потрясает отдельно.

  Ответить  
 
 автор: nameIvan   (04.12.2008 в 09:41)   письмо автору
 
   для: Trianon   (04.12.2008 в 09:39)
 

Подскажите как лучше сделать?

  Ответить  
 
 автор: Trianon   (04.12.2008 в 10:25)   письмо автору
 
   для: nameIvan   (04.12.2008 в 09:41)
 

Я подсказывал...
Здесь, например. http://softtime.ru/forum/read.php?id_forum=1&id_theme=57057

  Ответить  
 
 автор: Николай2357   (04.12.2008 в 10:44)   письмо автору
 
   для: Trianon   (04.12.2008 в 10:25)
 

Кстати, мне в тот раз это сильно помогло. С тех пор в моей личной консоли есть вот такой скриптик (можно вставлять искомые функции прямо из контекста)
<?php
if(isset($_POST['php']))
{
$a =  preg_replace("#[^a-zA-Z_\(]#i"""$_POST['php']);
$a =  preg_replace("#[а-яёА-ЯЁ]#i"""$a);
$a =  preg_replace("#(.*?)\(.*#i""$1"$a);
header("Location: http://php.net/".$a);
}
?>
<form action='?' method=post >
Найти в мануале <br />
<input  name=php onfocus="this.value=''" type=text ><br>
<input  type=submit   value=Найти >
</form>
может кому пригодится...

  Ответить  
 
 автор: sim5   (04.12.2008 в 09:42)   письмо автору
 
   для: nameIvan   (04.12.2008 в 09:33)
 

Нет не правильно, потому как вы передаете в базу совсем не то, что требуется. И вообще, я вам уже говорил о copy(). Что за версией РНР вы пользуетесь?
Прочтите сперва это:
http://www.php.net/manual/ru/function.move-uploaded-file.php
http://www.php.net/manual/ru/features.file-upload.php

  Ответить  
 
 автор: nameivan   (04.12.2008 в 11:35)   письмо автору
 
   для: sim5   (04.12.2008 в 09:42)
 

спасибо, сделал, работает

  Ответить  
 
 автор: sim5   (04.12.2008 в 11:42)   письмо автору
 
   для: nameivan   (04.12.2008 в 11:35)
 

Ну и слава богу. Только держать ссылку на изображение в базе как "images/".$_FILES["Fot1"]["name"], тоже не всегда оправдано.

  Ответить  
 
 автор: nameIvan   (09.12.2008 в 21:19)   письмо автору
 
   для: nameivan   (02.12.2008 в 23:00)
 

Сделал загрузка файла на сервер и ресайз. Теперь столкнулся с проблемой загрузка и ресайзом нескольких файлов сразу. Причем один файл обязательно должен загрузить пользователь а второй, третий и т.д. пользователю загружать необязательно Подскажите пожалуйста как решить данную проблему?

     <form action="upload.php" method="post" enctype="multipart/form-data">
         <input name="Fot1" type="file" id="Fot1">
         <br>
         <input name="Fot2" type="file" id="Fot2">
         <br> 
         <input type="submit" value="Загрузить"><br>
      </form>



<? 
   $f1 
time().$_FILES["Fot1"]["name"]; 
   if(
copy($_FILES["Fot1"]["tmp_name"], "images/".$f1)) 
    { 
     
$path = array('from'=>"images/$f1"'to'=>"images/small/$f1");
     
$res=resize_img($path150100);
  
     
$link=mysql_connect("localhost""root""") or die("Сервер не найден");
     
// выбор таблицы
     
mysql_select_db("base") or die("Таблица не найдена");
     
$query "insert into upload (`file`) value ('$f1')";
     
mysql_query($query$link);

       echo 
mysql_error();

      
// закрываем солединение
      
mysql_close($link);
      echo(
"Файл загружен");
     
       } 
  else 
  { 
   echo(
"Ошибка загрузки файла"); 
  }
?>

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования