Лучший подход для быстрой отладки и эффективного исправления ошибки загрузки больших файлов изображений
Рассмотрим нормальную функциональность загрузки изображений PHP (без использования AJAX), и возникает проблема, связанная с периодической ошибкой загрузки больших изображений - реже на одном тестовом сервере и чаще на другом тестовом сервере. Предполагая, что отладчик еще не начал отладку проблемы и нет проблем с правами доступа к файлам / папкам, как продолжить?
Я уверен, что у меня есть file_uploads
на. Я не хочу просто слепо устанавливать некоторые безопасные значения или увеличивать значения до тех пор, пока это не сработает. По сути, я хочу, чтобы значения были точно такими, как указано в моих соответствующих модулях. Я готов переопределить настройки в моих соответствующих модулях, если это лучший подход.
В соответствии с настройками, относящимися к загрузке файлов, это все соответствующие / связанные настройки -
* file_uploads
* upload_max_filesize
* max_input_time
* memory_limit
* max_execution_time
* post_max_size
Поиск параметров / значений для соответствующего скрипта -
Чтобы я мог выяснить, какой из них / сколько из них на самом деле нарушаются моим сценарием и вызывают сбой, мне нужно сначала найти соответствующие значения для моего сценария. Как найти следующие значения для моего скрипта:- Общий размер загруженных файлов
- Время ввода
- Использование памяти
- Время выполнения скрипта
- Размер опубликованных данных
Какой инструмент (ы) могут быть использованы для того же. С помощью кода PHP, я думаю, я могу узнать несколько:
- Время выполнения скрипта - разница между
microtime(true)
в начале и конце скрипта. - Общий размер загруженного файла - цикл по каждому элементу включен
$_FILES
найти сумму['size']
атрибут
Как узнать остальное, как использование памяти, время ввода и т. Д.?
Где / Как переопределить
Наконец, когда я нашел нарушающие настройки, предположим, мне нужно увеличить / переопределить значения для 2 настроек. Где применить переопределение? Я думаю, это не правильно установитьmemory_limit
и т.д. для всех модулей в htaccess или в скрипте PHP. Скорее, лучше применять только в соответствующем модуле. Я прав?Настройки для менее требовательных модулей
Кроме того, для других модулей, где много ресурсов не требуется, целесообразно ли переопределять настройки, чтобы уменьшить их, после тщательного изучения требований к ресурсам модулей? Это уменьшит ненужное потребление ресурсов? Если да, то как насчет двух или трех комбинаций этих настроек (в зависимости от требований проекта, именования их normal-script, heavy-file-upload) и вызова одной функции для загрузки любой одной комбинации для каждого модуля?меры предосторожности
относительноmemory_limit
здесь упоминается, что -Установка слишком высокого значения может быть очень опасной, потому что, если несколько загрузок обрабатываются одновременно, вся доступная память будет израсходована, и другие несвязанные сценарии, которые потребляют много памяти, могут также повлиять на весь сервер.
Какие общие меры предосторожности предпринять по этому поводу?
Спасибо,
Sandeepan
1 ответ
Несколько идей для отладки:
Для ручного тестирования я подготовил бы серию изображений с различными размерами, размер которых (ширина x высота) увеличивается небольшими шагами: 100 x 100, 100 x 200, 100 x 300 .... и попробовал их. В какой-то момент они могут начать сбой, если проблема заключается в ограничении памяти. Вы могли бы включить error_reporting()
только для себя (возможно, используя какой-то файл cookie отладки), так что вы видите, что именно не получается.
Если это не вариант, я бы настроил какой-то механизм долгосрочной регистрации, который сохраняет размеры изображения в файл журнала или таблицу до начала изменения размера, а также содержимое $_FILES
массив. После успешного завершения сценария добавьте "OK" к этой записи. Таким образом, вы сможете узнать больше о неудачных загрузках, если они дойдут до сценария (и не потерпят неудачу заранее из-за настройки тайм-аута).
Кроме того, для других модулей, где много ресурсов не требуется, целесообразно ли переопределить настройки, чтобы уменьшить их
Я думаю, что ответ всегда "нет". Насколько я знаю, предел памяти - это максимальный предел памяти, который может быть выделен, но этот объем не зарезервирован для каждого запроса. Я никогда не слышал, чтобы кто-нибудь так точно настраивал ограничение памяти.
Однако, если для некоторых частей системы (например, для изменения размера изображения) требуется чрезвычайно высокий предел памяти, может быть целесообразно применить определенные memory_limit
настройки только для них, например, через .htaccess
установка.