Неустранимая ошибка: максимальное время выполнения превышено при создании массовых миниатюр в php - PullRequest
0 голосов
/ 08 ноября 2010

Я пытаюсь написать скрипт PHP, который будет выполнять следующее:

  1. Извлечение всех файлов из архива в данном каталоге (с помощью функции exec для фактического запуска 7z)

  2. Перечислите все файлы изображений (jpg, jpeg, gif, png) и сохраните их в массиве (используя exec снова для запуска "ls" и сохраняя только изображения в массиве, я сравниваю расширение )

  3. Цикл по массиву и для каждого изображения:
    1. Переместить это изображение в уникальную папку
    2. Создание миниатюр в той же уникальной папке (я использую PHP Thumbnailer )
    3. Запишите это новое изображение в базу данных

Для небольшого количества изображений я бы сказал, что скрипт работает нормально (возможно, его можно улучшить).

Моя проблема в том, что после определенного числа (которое кажется случайным при каждом запуске сценария) обработанных изображений я получаю фатальную ошибку:
Неустранимая ошибка PHP: максимальное время выполнения 60 секунд превышено в /var/www/ims/public_html/dev/include/phpThumb/GdThumb.inc.php в строке 217

imagecopyresampled
(
    $this->workingImage,
    $this->oldImage,
    0,
    0,
    0,
    0,
    $this->newDimensions['newWidth'],
    $this->newDimensions['newHeight'],
    $this->currentDimensions['width'],
    $this->currentDimensions['height']
); // <- this is line 217

Я надеюсь, что кто-то может указать мне причину этого тайм-аута. Библиотека GD ограничена? Должен ли я установить специальное программное обеспечение на моем сервере Linux, чтобы конкретно выполнить эту задачу?

Спасибо за вашу помощь.

Ответы [ 3 ]

1 голос
/ 08 ноября 2010

60-секундный лимит времени для всего процесса сценария.В первую очередь он предназначен для того, чтобы не допустить мошеннического дочернего процесса php связать дочерний процесс apache (или другой ресурс веб-сервера) на загруженном сервере.

Если вы используете php как язык сценариев оболочки, а не как вебПриложение Я бы рекомендовал либо set_time_limit(0);, либо убедиться, что вы запускаете скрипт в интерпретаторе php cli, который делает это автоматически.

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

0 голосов
/ 08 ноября 2010

Перейдите к вашему php.ini файлу и найдите max_execution_time (около 30% пути в шахте). Измените это число на то, что вы хотите.

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

0 голосов
/ 08 ноября 2010

php ограничивает время выполнения скрипта.Вы можете увеличить это в php.ini или для каждого сценария, используя set_time_limit

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...