【问题标题】:Why has my PHP system() command stopped returning output to my scripts ... i used to work!为什么我的 PHP system() 命令停止将输出返回到我的脚本……我曾经工作过!
【发布时间】:2009-11-17 13:19:14
【问题描述】:

我有一个使用 system() 调用 .bat 文件的 PHP 脚本。输出被写入屏幕,我通过解析这个输出得到一些值。这是在 Windows 2003 IIS 服务器上运行的。 PHP v5.2.0

具体来说,我正在使用这个脚本来启动一个 Amazon EC2 实例并为其分配一个 IP 地址。到目前为止,它对我来说效果很好,但最近问题开始了。

这里是代码

$resultBatTemp = system("cmd /C C:\Inetpub\ec2\my_batch_file_to_launch_instance.bat");
$resultBat = (string)$resultBatTemp;
$instanceId  = substr($resultBat, 9, 10);

...

一旦我有了这个实例 ID,我就可以运行另一个批处理文件,该文件调用将一个 IP 地址与这个实例相关联。似乎实例确实启动了,但我从未在屏幕上看到输出。

由于某种原因,这一切都停止了工作,页面冻结并且永远不会刷新。我还需要完全退出 safari 或 mozilla,否则网站上的所有页面都无法加载。只有当我重新启动浏览器时,我才能再次查看该网站。我已经连接到托管这些脚本的网络服务器并检查了 PHP 错误日志,但那里没有显示任何内容。我打开了一个 DOS 提示符并以这种方式从 bat 文件中输入了代码,它连接到亚马逊并正常启动了实例。我已经隔离了这段代码并删除了系统命令,并且脚本的其余部分运行良好,因此看来问题在于输出 bat 文件的结果。

最近我为该站点购买了一个新域名,因此该脚本从该域运行。这可能会导致问题吗?

谢谢

----------------------------------- -更新 - - - - - - - - - - - - - - - - - - - - - - - -

希望这对某人有所帮助,我没有找出问题所在,但使用一个简单的系统命令创建了一个新的 PHP 文件,该命令称为 .bat 文件,并且不存在的 .bat 文件预计会出现错误回来但什么都没有 - 只是多年来的通常挂起。所以我重新启动了 IIS,这解决了问题。不知道出了什么问题,但那成功了。

【问题讨论】:

    标签: php amazon-ec2 system batch-file


    【解决方案1】:

    也许首先检查system() 调用返回的内容。根据documentation,如果失败,它将返回FALSE。此外,在问题中包含您的my_batch_file_to_launch_instance.bat 可能有助于解决问题。

    【讨论】:

    • 感谢您的帮助,尽管我找到了解决方案 - 请参阅更新后的问题。
    • 是的,重新启动 Web 服务器(或其他任何东西)可以解决奇怪的问题。去过那里;-)
    【解决方案2】:

    尝试使用passthru函数

    还要确保您的所有命令都是安全的,使用 escapeshellarg() 或 escapeshellcmd() 以确保用户不会欺骗系统执行任意命令。

    【讨论】:

    • 谢谢,我试过 passthru,但什么也没有。感谢您对逃生壳的建议..
    猜你喜欢
    • 2019-01-31
    • 2021-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-12
    • 2013-04-04
    相关资源
    最近更新 更多