PHP exec whit nohup работает по командной строке, но не по вызовам http

У меня есть этот скрипт, который запускает другой в фоновом режиме, не дожидаясь его завершения.

Мой скрипт.php:

$cmd = "nohup php script2.php > /dev/null 2>&1 &";
exec($cmd);

Мой скрипт2.php:

sleep(10);
mail("[email protected]","test","ok");

Если я запускаю его в командной строке, он работает нормально: звонок завершается сразу же, и через 10 секунд я получаю новое письмо в свой почтовый ящик.

Но если я позвоню на мой сценарий с Http: //myserver/script.php, Я ничего не получаю.

Обратите внимание, что с помощью:

$cmd = "php script2.php > /dev/null 2>&1";

работает в обоих вызывающих методах. Так что что-то не так с http-вызовом и использованием nohup.

Я также попробовал passthru и shell_exec вместо exec с теми же результатами.

Также попробовал этот на всякий случай, но это не сработало ни в коем случае.

0

Решение

Создайте файл на своем сервере с именем phpinfo.php.

Этот файл будет иметь только одну строку кода:

<?php echo phpinfo() ?>

Если вы не уверены, здесь есть полное руководство:
http://www.inmotionhosting.com/support/website/php/create-phpinfo-page-to-see-php-settings
Многие хостинговые компании могут отключить exec (), и вы не сможете изменить файл php.ini.

Если так, то лучше всего начать с функции php mail.
http://php.net/manual/en/function.mail.php

Дополнительная информация о php.ini:
Ваше первоначальное утверждение, что оно работает из командной строки, а не из вызова через браузер, делает для меня директивы php.ini наиболее вероятным виновником. Когда PHP выполняется через веб-сервер, выполнение любого сценария продиктовано этими директивами. Лучший справочник — документация PHP: http://php.net/manual/en/ini.core.php. Если вы запускаете phpinfo.php из браузера на вашем сервере, вы ищете раздел «Ядро» и в нем строку таблицы disable_functions.

На моем сервере разработки есть много отключенных функций; в том числе exec () и fork ().

Если вы можете редактировать свой файл php.ini, вы можете удалить функцию exec из строки

disable_functions =

и перезапустите ваш веб-сервер; хотя я бы обескуражил это. Эта функция отключена из соображений безопасности.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]