PHP exec () зависает, ошибка 500 - PullRequest
       28

PHP exec () зависает, ошибка 500

0 голосов
/ 22 сентября 2009

Итак, я планирую сделать небольшие эскизы URL-адресов с помощью PHP и IECapt. IECapt хорошо работает, хороший инструмент командной строки, получает полноразмерное изображение указанного URL за 1-4 секунды. Но моя проблема - выполнить его через PHP. Вот код, который я пытаюсь заставить работать:

exec('IECapt.exe ' . escapeshellarg($URL) . ' ' . escapeshellarg($Filename))

$ URL - это, конечно, URL, а $ filename - это упрощенная версия URL.

Иногда я получаю IECapt для привязки изображения (через PHP), но это занимает ужасно много времени (30-60 с), и в конце я всегда получаю 500 ошибок, без сообщений об ошибках, чтобы сказать мне, что случилось. Обе переменные в порядке, они работают вручную с командной строкой:

IECapt http://google.com Google.png

Мой сервер настроен на IIS7 и PHP5.2.9, если применимо. (Windows Vista, все на моем персональном компьютере, полный доступ.)

Есть идеи?

Ответы [ 2 ]

0 голосов
/ 22 сентября 2009

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

Вам нужно написать сценарий CLI (командную строку) для асинхронного выполнения подобных действий. Сценарии CLI не имеют ограничений по времени выполнения по умолчанию.

Подробнее

см. http://php.net/cli

Если вы часто сталкиваетесь с подобными вещами (т. Е. Должны обрабатывать сотни таких действий), вам следует взглянуть на очереди сообщений, которые предназначены для решения подобных проблем. Смотри http://framework.zend.com/manual/en/zend.queue.html

Веб-браузер не подходит для интенсивной обработки:)

0 голосов
/ 22 сентября 2009

Возможно, время выполнения превышено, и ваш скрипт убит.http://us3.php.net/manual/en/info.configuration.php#ini.max-execution-time

После того, как вы редактируете файл конфигурации, проверьте также, что отображение сообщений об ошибках включено, чтобы они попадали на ваш экран (установите display_errors на On)

...