Как я могу выполнить внешний двоичный файл из моего 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 и вообще с веб-проектами такого рода, я бы действительно хотел получить лучшее представление о «правильном» подходе к этой проблеме. Я уверен, что должен быть стандартный способ?
Вы можете достичь этого, запустив команду в фоновом режиме просто добавив &
на команду, которой вы хотите бежать.
Он будет запускать двоичный файл в отдельном процессе без возвращаемого значения.
<?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
Других решений пока нет …