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

StackOverflow https://stackoverflow.com/questions/3966365

Вопрос

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

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

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

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

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

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

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

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

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

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

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

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

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

Спасибо,
Sandeepan

Это было полезно?

Решение

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

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

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

Также для других модулей, где много ресурсов не нужны, это хорошо / мудро переопределить настройки, чтобы уменьшить их

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top