Файлы PHP загружаются с частичной загрузкой - PullRequest
3 голосов
/ 04 марта 2009

У меня есть сайт, который получает 30-40 тыс. Загрузок фотографий в день, и теперь я вижу проблему, всплывающую с большей частотой. Эта проблема такова:

Наш скрипт загрузки получает (через $ _FILES ['name'] ['tmp_name']) файл (фотографию), который НЕ был загружен пользователем, и большую часть времени, когда полученный файл является "частичной" загрузкой.

Конечно, сначала я подумал, что мой PHP-код допускает простую ошибку, и я потратил несколько дней, чтобы убедиться в этом, но после установки проверок в коде я обнаружил, что файл получен через HTTP POST загрузить в PHP на самом деле не тот файл. Так что проблема происходит до того, как она достигает моего кода. Файл tmp (phpxxxx), полученный сценарием, иногда неверен, как будто он каким-то образом перезаписывается другим процессом и обычно перезаписывается файлом, который был частично загружен.

Кто-нибудь видел подобные проблемы? Любая помощь очень ценится. Я обращаюсь к этому как к последнему средству после нескольких дней поиска / запроса других разработчиков PHP

Итак, резюмируем:

  • Пользователь загружает фото
  • PHP-скрипт получает файл, который не был загружен пользователем (предварительный код, через $ _FILES в / var / tmp)
  • Обычно полученный неверный файл является частичной или прерванной загрузкой
  • Кажется, это происходит случайно, а не постоянно

Ответы [ 3 ]

2 голосов
/ 04 марта 2009

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

Это среда разработки? Возможно ли, что несколько пользователей загружают файлы одновременно?

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

Попробуйте использовать разные навигаторы, чтобы исключить, по-видимому, удаленную возможность того, что это локальная проблема.

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

1 голос
/ 25 апреля 2012

Встроенная в PHP обработка файлов не поддерживает частичную загрузку.

Отключите KeepAlives и / или отправляйте заголовок «Соединение: закрыть» после каждой загрузки.

Настройте свой веб-сервер так, чтобы он отправлял заголовок «Allow-Ranges: none».

1 голос
/ 04 марта 2009

Прежде всего, проверьте версию PHP.

Во-вторых, проверьте ограничения загрузки файлов и POST_MAX_SIZE в php.ini

Возможно, кто-то пытается загрузить слишком большой файл: -)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...