我一直在搜索与此类似的几个问题,但我找不到适合我的答案,特别是对于Windows系统。 我在Windows机器上安装了PHP和Apache。我有一个调用Page1.php的应用程序。在Page1中,我执行了一些代码,并且在特定的时候我想要启动另一个PHP脚本,让我们称之为Script.php异步。我不需要将任何参数传递给第二个脚本 - 如果我可能有用但它不是强制性的 - 我不需要等待脚本完成因为我不想保留与用户进行通信,因为脚本对文件进行了大量操作,并且可以持续很长时间。 我已经看过并尝试过基于exec,popen,shell,system等的答案......但是我还没找到合适的答案,也许是因为我在Windows上工作。这些已经解决了我的一些解决方案尝试没有anysuccess:
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
...
...
?>
答案 0 :(得分:2)
复制自php.net对exec's page的评论:
这将在没有PHP的情况下在后台(没有cmd窗口)执行$ cmd 在Windows和Unix上等待它完成。
<?php
function execInBackground($cmd) {
if (substr(php_uname(), 0, 7) == "Windows"){
pclose(popen("start /B ". $cmd, "r"));
}
else {
exec($cmd . " > /dev/null &");
}
}
?>
我自己没有对此进行测试,但这与我的想法类似。 您还可以查看this stackoverflow问题以获取更多详细信息(可能有所帮助)。
答案 1 :(得分:0)
你叫什么&#34;异步&#34;实际上并不是异步的。您调用另一个脚本以便$var > $var2
执行,并将其称为if-statement
。
如果您的脚本必须位于其他文件中,您可以尝试使用include
,include_once
或require
或require_once
:
if ($var > $var2) {
include "Script.php";
}
其余的取决于Script.php。