В Интернете я нашел много информации о запуске php-кода в фоновом режиме, но я не могу воссоздать сценарий на моей машине.
Вот мой код:
//call.php
function run_background()
{
$PID = shell_exec("nohup php teste.php &");
return $PID;
}
function checking_process($pid)
{
exec("ps $pid", $state);
return (count($state) >= 2);
}
$ps = run_background();
copy("yel", "temp/yel2");
Когда вы запускаете файл call.php, страница загружается до запуска файла test.php. Это файл для тестирования:
//test.php
for($i=1; $i<=5; $i++)
{
sleep(1);
}
copy("yel", "temp/yel");
В обоих файлах я использую функцию копирования, чтобы проверить время выполнения действий. На данный момент я ожидаю, что, поскольку файл test.php на этом фоне и занимает не менее 5 секунд, поток файла call.php должен возникать независимо, но файл ‘yel2’ создается только после файла ‘yel’.
Тем не менее, функция на самом деле не работает в фоновом режиме, что ошибка делает?
Примечание: я использую Manjaro Linux 64bit, PHP 5.5 и Apache 2.4
Примечание 2: $ PID, возвращенный из функции run_background, действителен, я могу ясно найти его с помощью команды ‘ps aux’
Вместо того, чтобы просто добавить &
в конце попробуйте добавить >& /dev/null &
это то, с чем я имел успех. Так что в конечном итоге что-то вроде этого:
$PID = shell_exec("nohup php teste.php >& /dev/null &");
Других решений пока нет …