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

Форум PHP

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

 

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

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

тема: Непонятки при закачке файла на сервере
 
 автор: Dorimer   (14.09.2008 в 12:28)   письмо автору
 
 

Для проверки закачиваемых файлов использую встроенную в php функцию:

if ($_FILES['my_file']['error']>0) 
{
switch($_FILES['my_file']['error'])
{
case 1: $msg_errors[]="Размер файла больше 1.6 мб."; break; 
case 2: $msg_errors[]="Размер файла больше 1.6 мб."; break;
case 3: $msg_errors[]="Загружена только часть файла"; break;
case 4: $msg_errors[]="Выберете файл для загрузки"; break;
}
return;
}


Но тут заметил одну аномалию:
Если закачиваю файл больше 1.6мб, но меньше ~20мб , то все работает нормально и выдается ошибка. Но если закачиваю файл больше 20мб, то ошибок не возникает. Как такое может быть ? О_О

  Ответить  
 
 автор: Trianon   (14.09.2008 в 12:32)   письмо автору
 
   для: Dorimer   (14.09.2008 в 12:28)
 

а остальные ошибки обрабатывать не надо?
http://ru.php.net/manual/en/features.file-upload.errors.php

  Ответить  
 
 автор: Dorimer   (14.09.2008 в 12:49)   письмо автору
 
   для: Trianon   (14.09.2008 в 12:32)
 

Попробовал обработать и другие ошибки - тот же результат. Если файл не намного больше предельного размера, то выдается ошибка, если файл больше предельного размера на 10 мб, то файл проходит через фильтр О_О

  Ответить  
 
 автор: sim5   (14.09.2008 в 12:54)   письмо автору
 
   для: Dorimer   (14.09.2008 в 12:49)
 

is_uploaded_file() вам поможет.

  Ответить  
 
 автор: Trianon   (14.09.2008 в 12:58)   письмо автору
 
   для: Dorimer   (14.09.2008 в 12:49)
 

>если файл больше предельного размера на 10 мб, то файл проходит через фильтр О_О

То есть поле error равно нулю и функцией move_uploaded_file() удается такой файл поместить в каталог?
Ой, сомнительно.
Вероятно, на больших файлах другие ошибки вылезают. Превышение post_max_size или что-то подобное...

  Ответить  
 
 автор: Dorimer   (14.09.2008 в 13:04)   письмо автору
 
   для: Trianon   (14.09.2008 в 12:58)
 

Если файл больше 1.6мб, но меньше ~ 10мб , то скрипт работает верно и выдает ошибку: Размер файла больше 1.6 мб.
Но если файл больше ~ 10мб, то ошибка не выдается и файл проходит уже последующие проверки..

  Ответить  
 
 автор: Trianon   (14.09.2008 в 13:15)   письмо автору
 
   для: Dorimer   (14.09.2008 в 13:04)
 

>Если файл больше 1.6мб, но меньше ~ 10мб , то скрипт работает верно и выдает ошибку: Размер файла больше 1.6 мб.
>Но если файл больше ~ 10мб, то ошибка не выдается и файл проходит уже последующие проверки..
Я спросил не про то, прошел ли файл проверки. Я спросил, оказался ли он на сервере в конечном итоге с полной длиной и неискаженным содержимым. В это как-то не верится.

  Ответить  
 
 автор: Dorimer   (14.09.2008 в 13:24)   письмо автору
 
   для: Trianon   (14.09.2008 в 13:15)
 

Нет, файл не закачивается.

  Ответить  
 
 автор: sim5   (14.09.2008 в 13:25)   письмо автору
 
   для: Dorimer   (14.09.2008 в 13:24)
 

Вот и проверяйте.

  Ответить  
 
 автор: Dorimer   (14.09.2008 в 13:29)   письмо автору
 
   для: sim5   (14.09.2008 в 13:25)
 

Вопрос собственно остается открытым: Получается, что встроенный обработчик ошибок слегка багнутый?

  Ответить  
 
 автор: sim5   (14.09.2008 в 13:33)   письмо автору
 
   для: Dorimer   (14.09.2008 в 13:29)
 

Размер файла проверяю по размеру закачнного в tpm, а не так. Если не закачан, проверяю ошибку, например на размер. Надо проверить такую ситуация, пока не встречалось, возможно и есть сбой.

  Ответить  
 
 автор: Trianon   (14.09.2008 в 13:45)   письмо автору
 
   для: Dorimer   (14.09.2008 в 13:29)
 

включите display spartup errors . Наверняка увидите что-то вроде
Warning: POST Content-Length of 14160765 bytes exceeds the limit of 8388608 bytes in Unknown on line 0
Начиная с php 5.2.0 эту ошибку можно даже отследить с помощью error_get_last()
Если версия помладше - и сильно надо - придется ковырять логи php.

В любом случае в массиве $_FILES элемент создан не будет .
Я бы не сказал, что это то же самое , что и "файл проверку прошел".

  Ответить  
 
 автор: Dorimer   (14.09.2008 в 14:02)   письмо автору
 
   для: Trianon   (14.09.2008 в 13:45)
 

Спасибо, теперь все нормально работает!

  Ответить  
 
 автор: Trianon   (14.09.2008 в 13:28)   письмо автору
 
   для: Dorimer   (14.09.2008 в 13:24)
 

Значит, Вы какую-то другую ошибочную ситуацию пропустили. Проверяйте.

  Ответить  
 
 автор: Dorimer   (14.09.2008 в 13:32)   письмо автору
 
   для: Trianon   (14.09.2008 в 13:28)
 

А как я мог что-то пропустить, если последующие фильтры учитывают, что встроенный обработчик не выдал ошибок?
if ($_FILES['my_file']['error']=0).. Последующие фильтры

  Ответить  
 
 автор: Trianon   (14.09.2008 в 13:55)   письмо автору
 
   для: Dorimer   (14.09.2008 в 13:32)
 

Встроенный обработчик ничего не говорит просто потому, что стартап-процесс отрезал вообще всё тело запроса.
До средств загрузки файла этот файл просто недошел.
можно, конечно, корить разработчиков php, что они так реализовали стартап.
Но это если Вам шашечки. Если ехать - см ранее.

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

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