У меня есть родительский PHP-скрипт, который может быть выполнен из браузера. Это порождает дочерний процесс через exec('/full/path/to/php -f /full/path/to/child_script.php args &> debug.log &')
, а затем возвращает ответ браузеру. В дочернем процессе создается куча файлов PDF с использованием Plates и mPDF. Когда вы вызываете через браузер exec
, дочерний скрипт получает около 10% -20% от способа создания PDF-файлов, а затем загадочно останавливается без каких-либо выходных данных, за исключением любых операторов echo
, которые я, возможно, использовал для отладки.PHP-скрипт выходит из строя при вызове из exec()
- ребенок скрипт работает при вызове из командной строки, используя точную ту же команду , используемый браузером
exec()
вызов работает на моей локальной машине и наш QA-сервер, но только не в производстве- безопасный режим выключен
- у меня есть
chmod 0777
«эд ребенка сценарий и все файлы/каталоги, она работает на display_errors
,log_errors
,track_errors
являются Л.Л. наerror_reporting = E_ALL | E_STRICT
max_execution_time = 600
exec
неdisable_functions
- называется
set_time_limit(0)
в детском сценарии
Я действительно тупик. Что может быть причиной этого? Или какие дальнейшие шаги следует предпринять для отладки?
UPDATE
Проблема не с вызовом exec
(или shell_exec
) сама по себе, так как я могу вызвать родительский сценарий, который затем вызывает главный сценарий через exec
из командной строки. Проблема возникает только при попытке выполнить через Интернет.
Если его печатные эхо-сообщения, как вы знаете, что он остановился? – cjds
Он прекращает генерировать PDF-файлы. В принципе, это цикл, который выполняется 250 раз, генерируя один PDF за итерацию. Я получаю инструкции эха для первых 30-70 итераций через равные промежутки времени, затем ничего. – blcook223
Лично, если бы мне пришлось использовать 'exec()' в сценарии, я бы удостоверился, что он не был доступен через окно браузера и сделать его заданием cron, если это применимо. –