Получение PHP для исполнения PHP - PullRequest
0 голосов
/ 11 февраля 2012

Я пытаюсь раскошелиться на процесс, заставляя PHP исполнять PHP, пока выводит данные в / dev / null и запускаю cmd в фоновом режиме

Прежде чем запустить его без вывода сообщений - я хочу проверитьcmd работает должным образом - однако, когда команда выполняется PHP, процесс (как основной, так и разветвленный) никогда не завершается, и браузер постоянно застревает на «Соединении ...»

Вот код:

$script = '/home/username/application/bg_job.php';
$args = 'foo bar';

$cmd = "php -f $script $args";
$return = exec($cmd, $arr_output, $code);

var_dump($return);

Я проверил пользователя Apache, который запускает скрипт, выполнив

whoami

и это было "username" - поэтому я вошел в систему как root и запустил

sudo -u username php -f /home/username/application/bg_job.php foo bar

И это работает.

Есть идеи, что я могу делать неправильно?

РЕДАКТИРОВАТЬ - К вашему сведению - вот содержимое bg_job.php

<?php
    file_put_contents('/home/username/test.txt', 'Hello !');
?>

Ответы [ 2 ]

0 голосов
/ 12 февраля 2012

Что я обнаружил, так это то, что если вы хотите запустить фоновый процесс, вы должны использовать proc_open.

Почему это работает таким образом, я полностью еще не понимаю, но всякий раз, когдаВы закрываете ресурс proc, программа не завершает выполнение.

Это также, если все сделано правильно, не приводит к зависанию чего-либо.

Это то, что я имею в виду.

$sCommand = "php -f /home/username/application/bg_job.php > /dev/null 2>&1 &";

$aPipes = array();

$rProcedure = proc_open($sCommand, array(), $aPipes);
proc_close($rProcedure);

Вы увидите, что он будет работать в фоновом режиме и не умрет, когда Apache закончит делать то, что делает.

0 голосов
/ 11 февраля 2012

Я думаю, что вы пытаетесь спровоцировать фоновое задание. В Linux это можно сделать с помощью ampersand :

php -f /var/file.php &

Более подробная информация о этой записи блога .

Итак, ваша команда станет:

$cmd = "php -f $script $args &";
...