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

Форум PHP

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

 

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

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

тема: обработка ошибок аплоада файлов
 
 автор: vastvision   (11.10.2009 в 19:43)   письмо автору
 
 

Скажите пожалуйста в каком случае элемент $_FILES[$file]['error'] принимает значение отличное от нуля? Я попробовал выбрать файл через форму, затем удалить файл и отправить данные, в результате в каталоге появился файл с нужным именем и расширением объёмом 0 байт, а элемент ['error'] равен 0 типа ошибок нет

  Ответить  
 
 автор: cheops   (11.10.2009 в 20:21)   письмо автору
 
   для: vastvision   (11.10.2009 в 19:43)
 

Значение 1 (UPLOAD_ERR_INI_SIZE) загружаемый файл превышает размер директивы upload_max_filesize, заданной в конфигурационном файле php.ini
Значение 2 (UPLOAD_ERR_FORM_SIZE) загружаемый файл превышает значение MAX_FILE_SIZE, заданное в HTML-форме
Значение 3 (UPLOAD_ERR_PARTIAL) загружена лишь часть файла.
Значение 4 (UPLOAD_ERR_NO_FILE) файл не загружен (вообще-то именно эту ошибку вы должны бы получить).
Значение 6 (UPLOAD_ERR_NO_TMP_DIR) не найдена временная директория.
Значение 7 (UPLOAD_ERR_CANT_WRITE) ошибка записи файла на диск.
Значение 8 (UPLOAD_ERR_EXTENSION) загрузка файла прекращена расширением.

  Ответить  
 
 автор: vastvision   (11.10.2009 в 20:24)   письмо автору
 
   для: cheops   (11.10.2009 в 20:21)
 

Значение 4 (UPLOAD_ERR_NO_FILE) файл не загружен (вообще-то именно эту ошибку вы должны бы получить).

но не получил. пробовал и на вин и на линуксе.

  Ответить  
 
 автор: vastvision   (11.10.2009 в 20:43)   письмо автору
 
   для: cheops   (11.10.2009 в 20:21)
 

<form action="test.php" method="post" enctype="multipart/form-data" name="uploader">
<input name="file" type="file" /><br />
<input name="submit" type="submit" value="UPLOAD" />
</form>
<?php
print_r($_FILES);
$file='file';
if(!empty($_POST['submit']))
{
if (is_uploaded_file($_FILES[$file]['tmp_name'])) move_uploaded_file($_FILES[$file]['tmp_name'], "images/" . $_FILES[$file]['name']);
}
?>

  Ответить  
 
 автор: Slo_Nik   (11.10.2009 в 20:55)   письмо автору
 
   для: vastvision   (11.10.2009 в 20:43)
 

$file='file'; при такой переменной файл не должен загружаться

  Ответить  
 
 автор: vastvision   (11.10.2009 в 21:00)   письмо автору
 
   для: Slo_Nik   (11.10.2009 в 20:55)
 

сделал другое имя и значение в скрипте и форме - ничего не изменилось
дамп массива
Array (
[pic] => Array (
[name] => 333.jpg
[type] => application/octet-stream
[tmp_name] => D:\php16D6.tmp
[error] => 0
[size] => 0 )
)

  Ответить  
 
 автор: Slo_Nik   (11.10.2009 в 21:07)   письмо автору
 
   для: vastvision   (11.10.2009 в 21:00)
 

значение поля "file" попадает в массив $_FILES, и получается, что переменной $file надо присвоить значение $_FILES['file']['name'] и переписать строку "move_uploaded_file($_FILES[$file]['tmp_name'], "images/" . $_FILES[$file]['name']);" на "move_uploaded_file($_FILES[$file]['tmp_name'], "images/" . $files);"

  Ответить  
 
 автор: vastvision   (11.10.2009 в 21:20)   письмо автору
 
   для: Slo_Nik   (11.10.2009 в 21:07)
 

окей, теперь move_uploaded_file не срабатывает, но [error] по прежнему 0

  Ответить  
 
 автор: Slo_Nik   (11.10.2009 в 21:42)   письмо автору
 
   для: vastvision   (11.10.2009 в 21:20)
 

вот только надо было и в остальных случаях поменять $file на просто 'file'
"move_uploaded_file($_FILES['file']['tmp_name'], "images/" . $file);"

  Ответить  
 
 автор: vastvision   (11.10.2009 в 21:49)   письмо автору
 
   для: Slo_Nik   (11.10.2009 в 21:42)
 

в каких остальных случаях?

  Ответить  
 
 автор: Slo_Nik   (11.10.2009 в 22:53)   письмо автору
 
   для: vastvision   (11.10.2009 в 21:49)
 

если значение input name="file" попадает в массив, в $_FILES['file']['name'] и присваивается переменной $file, то в $_FILES['$file']['tmp_name'] $file надо заменить на file и т.д.

  Ответить  
 
 автор: vastvision   (11.10.2009 в 23:03)   письмо автору
 
   для: Slo_Nik   (11.10.2009 в 22:53)
 

ты можешь показать пример кода где используется обработчик ошибок связанных с загрузкой файла?

  Ответить  
 
 автор: Slo_Nik   (11.10.2009 в 23:20)   письмо автору
 
   для: vastvision   (11.10.2009 в 23:03)
 

ну сначала надо довести до ума твою форму загрузки файла.
у тебя файлы загружаются в указаную директорию?

  Ответить  
 
 автор: Slo_Nik   (11.10.2009 в 23:20)   письмо автору
 
   для: vastvision   (11.10.2009 в 23:03)
 

ну сначала надо довести до ума твою форму загрузки файла.
у тебя файлы загружаются в указаную директорию?

  Ответить  
 
 автор: vastvision   (11.10.2009 в 23:51)   письмо автору
 
   для: Slo_Nik   (11.10.2009 в 23:20)
 

да.
вот пример, если для файлового интпута написать value= что-нибудь, например http://localhost/1.gif а его не будет, то при загрузке будет ошибка с кодом 4. но странно что если по нормальному самому выбрать файл, удалить/переименовать его, а потом нажать 'отправить', то ошибки не выведется а будет создан файл 0 байт

  Ответить  
 
 автор: neadekvat   (12.10.2009 в 00:07)   письмо автору
 
   для: vastvision   (11.10.2009 в 23:51)
 

Насколько я помню, нельзя по умолчанию вставить адрес файла в value тэга input

  Ответить  
 
 автор: Slo_Nik   (12.10.2009 в 00:20)   письмо автору
 
   для: vastvision   (11.10.2009 в 23:51)
 


<?php
print <<< FILE
<form method="post" enctype="multipart/form-data">
название: <br>
<input type='text' name='name'><br>
<input type='file' name='file'>
<input type='submit' name='sub' value='загрузить'>
</form>
FILE;
if(isset(
$_POST['sub'])){
  if(
$_FILES['file']['error'] == ""){
   
move_uploaded_file($_FILES['file']['tmp_name'],"images/".$_FILES['file']['name']);
   echo 
"файл загружен в указанную директорию.";
  }
  else{
  echo 
"Ошибка при загрузке файла на сервер.<br>".$_FILES['file']['error'];
  }
}
?>

вот , на скорую руку... будет выводить ошибки

  Ответить  
 
 автор: vastvision   (12.10.2009 в 12:09)   письмо автору
 
   для: Slo_Nik   (12.10.2009 в 00:20)
 

спасибо, мой код мало чем отличался от этого, но я по прежнему не понимаю почему если выбрать файл в форме, потом удалить его и нажать 'отправить' ['error'] будет равен 0 и создастся пустой файл

  Ответить  
 
 автор: Рома   (12.10.2009 в 12:19)   письмо автору
 
   для: vastvision   (12.10.2009 в 12:09)
 

>['error'] будет равен 0 и создастся пустой файл

потому скрипт некорректно обрабатывает ситуации. error=0 это вовсе не аргумент для создания файла.

  Ответить  
 
 автор: Slo_Nik   (12.10.2009 в 14:15)   письмо автору
 
   для: vastvision   (12.10.2009 в 12:09)
 

если выбрать файл, а потом удалить его из поля, то выдаёт ошибку "4", а вот почему у тебя выдаёт "0"....
покажи полностью свой скрипт.

  Ответить  
 
 автор: TetRiska   (12.10.2009 в 01:02)   письмо автору
 
   для: vastvision   (11.10.2009 в 23:51)
 

для файлового инпута нельзя прописать валуе...это запрещено с целей безопасности.

  Ответить  
 
 автор: vastvision   (12.10.2009 в 12:05)   письмо автору
 
   для: TetRiska   (12.10.2009 в 01:02)
 

На своей локальной машине я это сделал в целях эксперимента

  Ответить  
 
 автор: neadekvat   (12.10.2009 в 17:11)   письмо автору
 
   для: vastvision   (12.10.2009 в 12:05)
 

Нельзя - это значит не запрещено вам руками делать, а запрещено делать в принципе, вы хоть наизнанку выворачивайтесь, браузер не позволит вставить значение по умолчанию

  Ответить  
 
 автор: Slo_Nik   (12.10.2009 в 00:42)   письмо автору
 
   для: vastvision   (11.10.2009 в 23:03)
 

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

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

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