在WINDOWS系统中从php页面异步执行php脚本

在WINDOWS系统中从php页面异步执行php脚本,php,windows,asynchronous,Php,Windows,Asynchronous,我一直在搜索几个类似的问题,但我没有找到适合我的答案,尤其是对于Windows系统。 我已经在Windows机器上安装了PHP和Apache。我有一个叫Page1.php的应用程序。在第1页中,我执行了一些代码,在某个特定点上,我想启动另一个php脚本,让我们异步地称它为script.php。我不需要将任何参数传递给第二个脚本——如果可以的话,这可能会有帮助,但不是强制性的——我也不需要等待脚本完成,因为我不想保留与用户的通信,因为脚本会对文件进行大量操作,并且可能会持续很长时间。 我看过并尝试

我一直在搜索几个类似的问题,但我没有找到适合我的答案,尤其是对于Windows系统。 我已经在Windows机器上安装了PHP和Apache。我有一个叫Page1.php的应用程序。在第1页中,我执行了一些代码,在某个特定点上,我想启动另一个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
...
...
?> 

您所谓的“异步”实际上并不是异步的。在case
$var>$var2
中调用另一个脚本来执行,它被称为
if语句

如果您的脚本必须位于另一个文件中,您可以尝试使用
include
include\u once
require
require\u once

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

其余部分取决于Script.php。

复制自php.net对以下内容的评论:

这将在后台执行$cmd(无cmd窗口),而不使用PHP 在Windows和Unix上等待它完成


我自己没有测试这个,但它与我所想的方向相似。
您还可以查看stackoverflow问题以了解更多详细信息(可能会有所帮助)。

您是否在命令行中尝试了该命令?它会产生语法错误,因为&>在Windows中没有任何意义。(也没有/dev/null。)OP想知道如何异步调用另一个脚本。事实上,他希望这发生在if语句中只是一个无关紧要的细节。嗨,哈利,这就是重点。if语句完全不相关。我需要执行script.php,而不需要Page1.php等待它完成,以继续它自己的执行行。正如我从您的代码中看到的,它只执行命令行,对吗?@user3188554该命令可用于启动另一个脚本。请查看php.net页面,了解如何在您的机器上执行此操作。好的,我几乎就知道了,但它仍然无法工作,我想问题在于帐户权限。也许该帐户需要有管理员权限,这有意义吗?@user3188554有。您可以尝试使用此处使用的相同命令运行脚本,并查看它是否有效。如果没有,请尝试以管理员身份运行cmd,然后再试一次。如果可以,您应该确保始终以管理员身份执行此命令。如果这不是问题所在,您可以尝试使用本文中所述的WScript.Shell(如果它有效,我会相应地更新我的答案)。
<?php 
function execInBackground($cmd) { 
    if (substr(php_uname(), 0, 7) == "Windows"){ 
        pclose(popen("start /B ". $cmd, "r"));  
    } 
    else { 
        exec($cmd . " > /dev/null &");   
    } 
} 
?>