Большие ошибки загрузки файлов с PHP - PullRequest
2 голосов
/ 16 апреля 2009

У меня есть загрузка изображений для слайд-шоу, и пользователи постоянно загружают файлы размером более 2 МБ. Файлы этого размера работают нормально, но файлы большего размера вызывают то, что выглядит как тайм-аут браузера.

Вот мои настройки php ini:

  • Макс. Выделение памяти: 12M
  • Максимальный размер загружаемого файла: 10M
  • Макс. HTTP Размер сообщения: 10M
  • Максимальное время выполнения: 60
  • Максимальное время разбора ввода: 120

Эти настройки находятся в самом файле конфигурации, и я могу изменить их напрямую. Изменения отображаются при использовании phpinfo ().

Я работаю на сервере apache и php 4.3.9 (выбор клиента, а не мой). Ограничение на количество запросов к серверу apache установлено по умолчанию, которое, по моему мнению, составляет около 2 ГБ?

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

Вся помощь, которую я могу найти в сети, указывает на вышеуказанные настройки в качестве виновников, но все эти настройки намного выше, чем этот файл 2 МБ, и время ожидания 43 секунды.

Какие-нибудь предложения, куда я могу пойти отсюда, чтобы решить эту проблему?

Здесь приведены соответствующие настройки php ini из phpinfo (). Дайте мне знать, если мне нужно больше постить.

  • file_uploads Вкл.
  • max_execution_time 60 60
  • max_input_nesting_level 64 64
  • max_input_time 120 120
  • memory_limit 12M 12M
  • post_max_size 10M 10M
  • safe_mode Выкл. Выкл.
  • upload_max_filesize 10M 10M
  • upload_tmp_dir нет значения нет значения

Ответы [ 4 ]

2 голосов
/ 16 апреля 2009

Убедитесь, что в php.ini активированы отчеты об ошибках: display_errors = On ; это может дать вам подсказку о том, что происходит. На производственных серверах обычно (должны) отключаться отчеты об ошибках.

У меня недавно была похожая проблема, и увеличение параметра memory_limit сработало для меня. Если вы читаете файлы содержимое в переменные, каждая переменная займет столько же памяти, сколько размер файла, что увеличивает требования к памяти скриптов.

0 голосов
/ 16 апреля 2009

Если это общий хост, ваш хост может установить ограничение для переопределения вашего.

В противном случае попробуйте установить ограничение POST выше, чем размер загружаемого файла. AFAIK, загрузка размещена.

0 голосов
/ 16 апреля 2009

Если проблема связана с тем, что хост переопределяет время ожидания, вы можете найти хост, который все еще использует Apache 1. В Apache 1 локальный .htaccess переопределяет глобальные настройки даже для времени ожидания.

В противном случае существуют десятки загрузчиков апплетов Java, которые можно купить всего за несколько долларов (Google it). Они разделяют файл, загружают части и прозрачно соединяют части.

Это гарантированное исправление тайм-аута, и оно имеет дополнительное преимущество, позволяя пользователям приостанавливать и возобновлять загрузку, видеть ход выполнения и т. Д.

(Flash-загрузчики не имеют этого преимущества.)

0 голосов
/ 16 апреля 2009

Где эти настройки? Если вы используете .htaccess, значит, ваша конфигурация Apache не позволяет вам переопределять эти настройки.

Я бы предложил проверить с помощью вызова phpinfo (), действительно ли применяются эти настройки:

<?php
  phpinfo();
?>
...