Выполнить скрипт php со страницы php асинхронно в системе WINDOWS

Я искал несколько вопросов, подобных этому, но я не нашел ответа, подходящего для меня, особенно для системы Windows.
Я установил PHP и Apache на Windows-машине. У меня есть приложение, которое вызывает Page1.php. В Page1 я выполняю некоторый код, и в определенный момент я хотел бы запустить другой скрипт php, назовем его Script.php асинхронно. Мне не нужно передавать какой-либо параметр этому второму сценарию — если бы это могло быть полезно, но это не обязательно — и мне не нужно ждать завершения сценария, потому что я не хочу сохранять общение с пользователем, так как скрипт выполняет много операций с файлами и может длиться довольно долго.
Я видел и пробовал ответы, основанные на exec, popen, shell, system и т. Д. … но я не нашел подходящий для меня, может быть, потому что я работаю на Windows. У них есть некоторые решения, которые я попробовал без всякого успеха:

exec('php script.php &> /dev/null &');
shell_exec('php script.php &> /dev/null &');
system('php script.php &> /dev/null &');
php script.php &> /dev/null &`

Схема может быть более или менее следующей:

page1.php

<?php
echo "Hello World";
echo "\n";
....
if ($var>$var2) {
HERE CALL SCRIPT.PHP ASYNC
}
...
?>

script.php

<?php
...
...
?>

2

Решение

То, что вы называете «асинхронным», на самом деле не является асинхронным. Вы делаете вызов для другого сценария, чтобы выполнить в случае $var > $var2 и это называется if-statement,

Если ваш скрипт должен быть в другом файле, вы можете попробовать использовать include, include_once или же require или же require_once:

if ($var > $var2) {
include "Script.php";
}

Остальное зависит от Script.php.

0

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

Скопировано из комментариев php.net страница исполнителя:

Это выполнит $ cmd в фоновом режиме (без окна cmd) без PHP
ожидая его завершения, как на Windows, так и на Unix.

<?php
function execInBackground($cmd) {
if (substr(php_uname(), 0, 7) == "Windows"){
pclose(popen("start /B ". $cmd, "r"));
}
else {
exec($cmd . " > /dev/null &");
}
}
?>

Я не проверял это сам, но это было похоже на то, о чем я думал.
Вы также можете посмотреть на этот stackoverflow вопрос для более подробной информации (может помочь).

2

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