Лучший подход для быстрого отладки и эффективно исправления больших файлов изображений Загрузка сбоя загрузки
-
09-10-2019 - |
Вопрос
Рассмотрим нормальный формат загрузки изображения PHP (не используя AJAX), и возникает эта проблема больших загрузочных изображений изредка - реже на одном тестовом сервере и чаще на другом тестовом сервере. Предполагая, что отладчик еще не начал отладить проблему, и нет проблем с разрешения файлов / папок, как продолжить?
Я уверен, что у меня есть file_uploads
на. Я не хочу просто слепо устанавливать некоторые безопасные значения или увеличить значения, пока он не работает. По сути, я хочу, чтобы значения были точно в соответствии с моими заинтересованными модулями. Я готов переопределить настройки в моих заинтересованных модулях, если это лучший подход.
В соответствии с Настройки, связанные с загрузкой файла, Это все соответствующие / связанные настройки -
* file_uploads
* upload_max_filesize
* max_input_time
* memory_limit
* max_execution_time
* post_max_size
Нахождение параметров / значений для соответствующего скрипта -
Так что я могу узнать, какой из них является / количество из них на самом деле нарушается моим сценарием и вызывает неудачу, мне нужно сначала найти соответствующие значения для моего сценария. Как найти следующие значения для моего сценария:- Общий загруженный размер файлов
- Входное время
- Использование памяти
- Время выполнения скрипта
- Размещенный размер данных
Какой инструмент (ы) можно использовать для того же. Думаю, используя PHP-код, я могу узнать несколько:
- Время выполнения сценария - разница между
microtime(true)
при начале сценария и заканчивается. - Общий загруженный размер файла - Foreach Loop на
$_FILES
найти сумму['size']
атрибут
Как узнать остальное, как использование памяти, входное время и т. Д.?
Где / как переопределить
Наконец, когда я нашел нарушу настройки (ы), предположим, что мне нужно увеличить / переопределить значения для 2 настроек. Где применить переопределение? Я думаю, это не правильно, чтобы установитьmemory_limit
и т. Д. Для всех модулей в HTACCESS или в PHP-скрипте. Скорее, применение только в соответствующем модуле лучше. Я прав?Настройки менее требовательных модулей
Кроме того, для других модулей, где много ресурсов не требуются, это хорошо / мудро переопределить настройки, чтобы уменьшить их, после тщательного изучения требований к ресурсам модулей? Это уменьшит ненужное потребление ресурсов? Если это так, то как насчет иметь 2 или 3 комбинации этих настроек (в зависимости от требований проекта, называя их обычным сценарием, тяжелыми файлами загрузки) и вызов одной функции для загрузки любой одной комбинации для каждого модуля?memory_limit меры предосторожности
Касательноmemory_limit
здесь упоминается, что -Установка слишком высока. Значение может быть очень опасно, потому что если несколько загруженных загрузки обрабатываются одновременно, все доступные памяти будут использованы и другие не связанные сценарии, которые потребляют много памяти, которые могут повлиять на весь сервер.
Какие общие меры предосторожности принять об этом?
Спасибо,
Sandeepan
Решение
Несколько идей для отладки:
Для ручного тестирования я бы подготовим серию изображений с разными размерами, чистый размер которых (высота ширины x) увеличивается на небольших этапах: 100 х 100, 100 х 200, 100 х 300 .... и попробуй их. В какой-то момент они могут начать не удавать, если проблема является пределом памяти. Вы могли бы включить error_reporting()
Для себя только (возможно, используя отладочную печенье какой-то сортировки), так что вы видите, что именно терпит неудачу.
Если это не вариант, я бы настроил механизм некоторой сортировки для долгосрочного ведения журнала, который хранит размеры изображения в файл журнала или таблицу перед начнкой изменения размера, а также содержимое $_FILES
множество. На успешном конце скрипта добавьте «ОК» на эту запись. Таким образом, вы сможете узнать больше о неудачных загрузках, если они пройдут через скрипт (и заранее не проваливаются из-за настройки тайм-аута).
Также для других модулей, где много ресурсов не нужны, это хорошо / мудро переопределить настройки, чтобы уменьшить их
Я думаю, что ответ всегда «нет». Насколько я знаю, предел памяти - максимальный предел памяти, который можно выделить, но эта сумма не зарезервирована для каждого запроса. Я никогда не слышал ни о ком-то, чтобы настроить ограничение на память таким образом.
Однако, если некоторые части системы (например, Resizer Image) требуют чрезвычайно высокого предела памяти, может быть разумно применить конкретные memory_limit
настройки только к ним, например, через а. .htaccess
параметр.