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

时间:2014-11-11 23:44:52

标签: php windows asynchronous

我一直在搜索与此类似的几个问题,但我找不到适合我的答案,特别是对于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
...
...
?> 

2 个答案:

答案 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

如果您的脚本必须位于其他文件中,您可以尝试使用includeinclude_oncerequirerequire_once

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

其余的取决于Script.php。