【问题标题】:How to execue PHP scripts in the background using EXEC() and CMD如何使用 EXEC() 和 CMD 在后台执行 PHP 脚本
【发布时间】:2013-09-05 17:09:17
【问题描述】:

我不能使用$com = new Com('WScript.shell'); 方式,它会导致我的系统出现问题。可能我需要升级我的 PHP,因为它很旧(5.2),但我想我想要做的不是版本依赖。

我在 Windows 2008 64 位上运行 PHP。我可以在其中运行以start 为前缀的命令以在单独的控制台上运行该命令。

start php myscript.php

如果这是从命令行执行的,它会为脚本启动一个新的控制台。

我需要在 PHP 中使用 exec 执行相同的操作。

exec("CMD /C start php myscript.php");

/C 是在脚本完成时终止 CMD 会话。

但它没有给出相同的结果,它仍在等待脚本终止!

【问题讨论】:

    标签: php windows cmd windows-console


    【解决方案1】:

    这应该有效:

    exec("start /B php myscript.php");
    

    同时关闭 myscript.php 最开始的所有标准流:

    fclose(STDIN);
    fclose(STDOUT);
    fclose(STDERR);
    

    如果您希望echo 仍然工作,您可以在关闭标准流后打开一个文件以写入标准输出:

    $STDIN = fopen('/dev/null', 'r');
    $STDOUT = fopen('myscript.log', 'wb');
    

    【讨论】:

    • 非常感谢start /B。但是其他fclose 声明是什么?!顺便说一句,我不是 PHP 开发人员 :)
    • Windows 不会让程序进入后台,除非它关闭所有 3 个标准流。
    • 这会影响文件记录或echo 语句吗?
    • 文件记录没有,但回显语句是 - 没有标准输出了。我会用另一个解决方案更新答案。
    • 在 Windows 上是nul
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-08
    • 2012-10-09
    相关资源
    最近更新 更多