Как выполнить php-файл в фоновом режиме из другого php-файла - PullRequest
0 голосов
/ 30 января 2019

У меня есть два файла, file_a.php и file_b.php.В файле file_a.php я пытаюсь выполнить file_b.php как «фоновый процесс».Я попробовал два способа, которые я нашел здесь на stackoverflow, но я не могу заставить его работать:

file_a.php (решение exec)

echo "Start ".time()."<br>";
exec("php -f /Path/to/file/file_b.php /dev/null &");
echo "End ".time()."<br>";

file_a.php (решение curl)

echo "Start ".time()."<br>";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://192.168.1.1:8888/file/file_b.php');
curl_setopt($ch, CURLOPT_FRESH_CONNECT, true);
curl_setopt($ch, CURLOPT_TIMEOUT_MS, 1);
curl_exec($ch);
curl_close($ch);
echo "End ".time()."<br>";

file_b.php (задержка 5 секунд и отправка образца письма)

set_time_limit(5);//setting five seconds delay
for ($i = 0; $i < 4; ++$i) {

    sleep(1);
}

// the message
$msg = "line of text";
// send email
mail("testmail@test.io","My subject",$msg)

I 'я пытаюсь вызвать file_a.php и выполнить file_b.php без ожидания 5 секунд в file_a.php, в точности как фоновый процесс.Есть способ управлять подобным поведением в PHP до PHP 7, для которого я видел несколько выделенных библиотек?

1 Ответ

0 голосов
/ 30 января 2019

Создайте файл background.sh со следующим содержимым

#!/bin/bash

/usr/bin/php -f /Path/to/file/file_b.php &

и затем вызовите его, используя первый метод

echo "Start ".time()."<br>";
exec("/bin/bash background.sh");
echo "End ".time()."<br>";

Оболочка прочитаетСценарий BASH, запустите файл PHP в фоновом режиме и немедленно вернитесь к исходному сценарию.

Более надежное решение - использовать систему очередей, например PHP-Resque

...