Проблема с Upload

Alexiy II

Guest
Проблема с Upload

Не могу понять почему не работает Upload файлов.
Закачиваю файл размером 6 Мб - всё прекрасно.
Пробую закачать файл размером 10 Мб - не получается. Браузер грузится (индикатор пока не

сделал), затем выскакивает ошибка 404. Коннект - 50 Кб/сек.

В папке моего сайта лежит файл .htaccess следующего содержания:

PHP:
<Files *.inc>
 order deny,allow
 deny from all
</Files>
php_flag register_globals off
php_flag session.use_trans_sid on
php_value upload_max_filesize 100M
php_value post_max_size 100M
php_value memory_limit 100M
php_value max_execution_time 600
php_value max_input_time 600
Форма (main.php):
PHP:
<form action="<?=$SELF?>" method="post" enctype="multipart/form-data">
  <!-- Другие поля -->
  <input type="hidden" name="MAX_FILE_SIZE" value="100000000">
  <input type="file" name="files[]" class="FILE">
  <input type="submit" name="add" value="Добавить" onclick="Проверка на пустые поля">
</form>
Скрипт, обрабатывающий закачанные файлы (upload.inc):
PHP:
$files_str = "";
foreach ($_FILES['files']['name'] as $key=>$file_name)
{
  if (!$_FILES['files']['size'][$key]) continue;

  /* Вывод кода ошибки в файл */
  $fp = fopen("1.txt", "w");
  fputs($fp, strval($_FILES['files']['error'][$key]));
  fclose($fp);
  /*****/  

  $uploadfile = dirname($_SERVER['SCRIPT_FILENAME'])."/".$FILES_DIR.$file_name;
  $files_str .= $file_name."*";			//Сохраняем имена всех файлов в строке
  $message_size += $_FILES['files']['size'][$key];		//И суммируем размер

  if (!move_uploaded_file($_FILES['files']['tmp_name'][$key], $uploadfile))
    die("Ошибка: не удалось отправить файл ".$file_name);
}
return $files_str;
В main.php также есть:
PHP:
$message_size = 0; 	//Суммарный размер
$message_files = include("includes/upload.inc");        //Список файлов

/* Вставка в базу $message_size и $message_files */
Никаких ошибок (по die) не выводится. Файл 1.txt содержит 0 (т.е. UPLOAD_ERR_OK). Данные в базу не добавляются.

В чём может быть проблема? Какие ещё настройки могут повлиять на это?
 

Макс

Старожил PHPClub
посмотри через phpinfo(), все ли настройки имеют правильное значение в этой папке ?

Например в старой доке по пхп некоторые опции из
Код:
php_value upload_max_filesize 100M 
php_value post_max_size 100M 
php_value memory_limit 100M 
php_value max_execution_time 600 
php_value max_input_time 600
имеют статус PHP_INI_SYSTEM
 

Alexiy II

Guest
Автор оригинала: Maxim Matyukhin
посмотри через phpinfo(), все ли настройки имеют правильное значение в этой папке ?

Например в старой доке по пхп некоторые опции из
Код:
php_value upload_max_filesize 100M 
php_value post_max_size 100M 
php_value memory_limit 100M 
php_value max_execution_time 600 
php_value max_input_time 600
имеют статус PHP_INI_SYSTEM
Все настройки имеют правильное значение для Local Value.
Master Value - по Default.

-~{}~ 28.03.04 20:40:

Сейчас пробовал закачивать на сервер через Mozilla FireBird. 6,3 Мб прошли на ура.
А вот 10 Мб не получилось. Дойдя где-то до 75% (синяя полоска) выскочило предупреждение: "Документ не содержит данных".

Кстати, дома, на виндах даже 40 Мб закачивается без проблем.

Если вопрос действительно ламерский, то почему никто не ответит. Скажите, хотя бы, где искать. На detail и php.spb статьи про upload читал. Весь форум облазил.
 

Lav

Guest
Возможно, вопрос не ламерский и никто просто не знает.

Мне, например, уже тоже интересно. :)

P. S. Если бы ты привел текст warning'а на английском - было бы проще.
 

Alexiy II

Guest
Warning никакого не выводится. Стандартная 404 ошибка.
 

IntenT

SkyDiver
hobobob
время выполнения скрипта не имеет к аплоаду никакого отношения.
читать доку про [m]set_time_limit[/m]
 

Alexiy II

Guest
Пробовал set_time_limit(0) - не помогает.

Сегодня выяснил, что ошибка возникает после 5 минут ожидания. Это не зависит от размера файла. Один раз не смог закачать 600 Кб из-за плохой связи - вылетело через 5 мин. Второй раз успел закачать.

Дома в файле httpd.conf нашёл строку
Timeout 300

А на сервере через phpinfo():
Timeouts Connection: 60 - Keep-Alive: 15

Т.е. если это одно и то же, то timeout установлен в 60 секунд.
Почему тогда меня выкидывает через 5 минут?
 

IntenT

SkyDiver
А дверью хлопал?? А монитор тряпочкой протирал???
ограничение на время выплнения скрипта действует ТОЛЬКО НА ВРЕМЯ ВЫПОЛНЕНИЯ СКРИПТА.
Аплоад файла происходит ДО НАЧАЛА выполнения скрипта..
Причем тут time_limit или execution_time?
 

Alexiy II

Guest
Сейчас попробовал изменить timeout в Apache'е -
поставил timeout = 3600
Через phpinfo проверил - значение установилось.

Но, всё-равно, через 5 минут возникает ошибка 404.

Как я уже говорил в Mozilla через эти самые 5 минут выскакивает сообщение "Документ не содержит данных".

Что делать? У меня уже закончились идеи.

-~{}~ 02.04.04 22:39:

Только что нарыл на PHP.net.

Практически мой случай:
"This took me a few days to find out: when uploading large files with a slow connection to my WIN2K/IIS5/PHP4 server the POST form kept timing out at exactly 5 minutes. All PHP.INI settings were large enough to accomodate huge file uploads. Searched like hell with keywords like "file upload php timeout script" until I realised that I installed PHP as CGI and added that as a keyword. This was the solution:

To set the timeout value:
1. In the Internet Information Services snap-in, select the computer icon and open its property sheets.
2. Under Master Properties, select WWW Service, and then click the Edit button
3. Click the Home Directory tab.
4. Click the Configuration button.
5. Click the Process Options tab, and then type the timeout period in the CGI Script Timeout box."

У меня PHP стоит, как модуль Apache. (В httpd.conf файле - loadmodule ...).

Помогите, пожалуйста, разобраться.
 
Сверху