правильный способ запуска двоичного файла в отдельном процессе без возвращаемого значения

Как я могу выполнить внешний двоичный файл из моего php-кода, чтобы страница не ожидала возвращаемого значения перед отправкой?

Позвольте мне уточнить. У меня есть веб-приложение, которое должно выполнять довольно интенсивные задачи, например, много файловых операций ввода-вывода. Я хочу, чтобы мой пользователь мог инициировать свою задачу из графического интерфейса в своем браузере, но затем я хочу, чтобы моя программа передала задачу в отдельный файл на моем сервере, чтобы моему пользователю не приходилось сидеть и ждать всей работы. быть готовым и рискуя отсрочить свою связь и т.д.

Позвольте мне показать вам простой пример того, что я пробовал:

index.php

<?php
echo "This is a test run for an eternal program: <br><br>";
echo shell_exec("hello");

//ok so we can run executables from php script YAY .. but what about if they are long programs?
//If my script is waiting for a return value surely the connection will time out?

echo "<br><br>";
echo shell_exec("long_run"); //Waits for return value as expected. Further more it
//just does not do the file IO

?>

Привет

#!/usr/bin/php5

<?php
echo "hello";
?>

long_run

#!/usr/bin/php5

<?php
$f = fopen("time.txt","a");
$i = 1;

while ($i < 10) {
sleep(2);
echo $i . "<br>";
fwrite($f, $i . " ");
$i++;
}

fclose($f);
?>

Примечание: я написал пример long_run на PHP для согласованности в реальности, моя программа является бинарной и должна взаимодействовать с PHP, на котором написан мой настоящий веб-сайт.

Я обдумывал решение своей проблемы, просто имея инструкции сохранения PHP в файл, который мой бинарный файл может сканировать на регулярной основе и действовать в соответствии с ним. Я думаю, что такой интерфейс был бы достаточно легок для его реализации, но как человек с ограниченным опытом работы с PHP и вообще с веб-проектами такого рода, я бы действительно хотел получить лучшее представление о «правильном» подходе к этой проблеме. Я уверен, что должен быть стандартный способ?

0

Решение

Вы можете достичь этого, запустив команду в фоновом режиме просто добавив & на команду, которой вы хотите бежать.

Он будет запускать двоичный файл в отдельном процессе без возвращаемого значения.

<?php
shell_exec("yourcommand &"); // It will run the 'yourcommand' in backgournd
.... // All further operations will be executed right after the shell exec without waiting for it return value
0

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

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

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