Файлы PHP загружаются с частичной загрузкой
У меня есть сайт, который получает 30-40 тыс. Загрузок фотографий в день, и теперь я вижу проблему, всплывающую с большей частотой. Эта проблема заключается в следующем:
Наш скрипт загрузки получает (через $_FILES['name']['tmp_name']) файл (фото), который НЕ был загружен пользователем, и большую часть времени полученный файл является "частичной" загрузкой.
Конечно, сначала я подумал, что мой PHP-код совершил простую ошибку, и я потратил несколько дней, чтобы убедиться в этом, но после установки проверок в коде я обнаружил, что файл получен через HTTP POST-загрузку в PHP на самом деле не тот файл. Так что проблема происходит до того, как она достигает моего кода. Файл tmp (phpxxxx), полученный сценарием, иногда неверен, как если бы он был каким-то образом перезаписан другим процессом и обычно перезаписан файлом, который был частично загружен.
Кто-нибудь видел подобные проблемы? Любая помощь с благодарностью. Я обращаюсь к этому как к последнему средству после нескольких дней поиска / запроса других разработчиков PHP
Итак, резюмируем:
- Пользователь загружает фото
- PHP-скрипт получает файл, который не был загружен пользователем (предварительный код через $ _FILES в /var/tmp)
- Обычно неверный полученный файл является частичной загрузкой или прерванной загрузкой
- Кажется, это происходит случайно и не всегда
3 ответа
Можете ли вы попробовать разные имена для временного файла, чтобы избежать его перезаписи? Можете ли вы определить происхождение нового, неправильного и неполного файла?
Это среда разработки? Возможно ли, что более одного пользователя загружают файлы одновременно?
Попробуйте свою программу с очень маленькими изображениями, чтобы проверить, правильно ли SchizoDuckie решает проблемы с размером файла.
Попробуйте использовать разные навигаторы, чтобы исключить, по-видимому, удаленную возможность того, что это локальная проблема.
Проверьте разрешения для каталога, в котором хранится временный файл.
Прежде всего, проверьте свою версию PHP.
Во-вторых, проверьте ограничения загрузки файлов и POST_MAX_SIZE в php.ini.
Возможно, кто-то пытается загрузить слишком большой файл:-)
Встроенная в PHP обработка файлов не поддерживает частичную загрузку.
Отключите KeepAlives и / или отправляйте заголовок "Connection: close" после каждой загрузки.
Сконфигурируйте свой веб-сервер так, чтобы он отправлял заголовок "Allow-Ranges: none".