Лучший подход для быстрой отладки и эффективного исправления ошибки загрузки больших файлов изображений

Рассмотрим нормальную функциональность загрузки изображений PHP (без использования AJAX), и возникает проблема, связанная с периодической ошибкой загрузки больших изображений - реже на одном тестовом сервере и чаще на другом тестовом сервере. Предполагая, что отладчик еще не начал отладку проблемы и нет проблем с правами доступа к файлам / папкам, как продолжить?

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

В соответствии с настройками, относящимися к загрузке файлов, это все соответствующие / связанные настройки -
* file_uploads
* upload_max_filesize
* max_input_time
* memory_limit
* max_execution_time
* post_max_size

  1. Поиск параметров / значений для соответствующего скрипта -
    Чтобы я мог выяснить, какой из них / сколько из них на самом деле нарушаются моим сценарием и вызывают сбой, мне нужно сначала найти соответствующие значения для моего сценария. Как найти следующие значения для моего скрипта:

    • Общий размер загруженных файлов
    • Время ввода
    • Использование памяти
    • Время выполнения скрипта
    • Размер опубликованных данных

    Какой инструмент (ы) могут быть использованы для того же. С помощью кода PHP, я думаю, я могу узнать несколько:

    • Время выполнения скрипта - разница между microtime(true) в начале и конце скрипта.
    • Общий размер загруженного файла - цикл по каждому элементу включен $_FILES найти сумму ['size'] атрибут

    Как узнать остальное, как использование памяти, время ввода и т. Д.?

  2. Где / Как переопределить
    Наконец, когда я нашел нарушающие настройки, предположим, мне нужно увеличить / переопределить значения для 2 настроек. Где применить переопределение? Я думаю, это не правильно установить memory_limit и т.д. для всех модулей в htaccess или в скрипте PHP. Скорее, лучше применять только в соответствующем модуле. Я прав?

  3. Настройки для менее требовательных модулей
    Кроме того, для других модулей, где много ресурсов не требуется, целесообразно ли переопределять настройки, чтобы уменьшить их, после тщательного изучения требований к ресурсам модулей? Это уменьшит ненужное потребление ресурсов? Если да, то как насчет двух или трех комбинаций этих настроек (в зависимости от требований проекта, именования их normal-script, heavy-file-upload) и вызова одной функции для загрузки любой одной комбинации для каждого модуля?

  4. меры предосторожности
    относительно memory_limit здесь упоминается, что -

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

Какие общие меры предосторожности предпринять по этому поводу?

Спасибо,
Sandeepan

1 ответ

Решение

Несколько идей для отладки:

Для ручного тестирования я подготовил бы серию изображений с различными размерами, размер которых (ширина x высота) увеличивается небольшими шагами: 100 x 100, 100 x 200, 100 x 300 .... и попробовал их. В какой-то момент они могут начать сбой, если проблема заключается в ограничении памяти. Вы могли бы включить error_reporting() только для себя (возможно, используя какой-то файл cookie отладки), так что вы видите, что именно не получается.

Если это не вариант, я бы настроил какой-то механизм долгосрочной регистрации, который сохраняет размеры изображения в файл журнала или таблицу до начала изменения размера, а также содержимое $_FILES массив. После успешного завершения сценария добавьте "OK" к этой записи. Таким образом, вы сможете узнать больше о неудачных загрузках, если они дойдут до сценария (и не потерпят неудачу заранее из-за настройки тайм-аута).

Кроме того, для других модулей, где много ресурсов не требуется, целесообразно ли переопределить настройки, чтобы уменьшить их

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

Однако, если для некоторых частей системы (например, для изменения размера изображения) требуется чрезвычайно высокий предел памяти, может быть целесообразно применить определенные memory_limit настройки только для них, например, через .htaccess установка.

Другие вопросы по тегам