【问题标题】:Can't get .bat to run with PHP on WAMP localhost无法在 WAMP localhost 上使用 PHP 运行 .bat
【发布时间】:2012-12-22 07:26:16
【问题描述】:

我已经在这个问题上苦苦挣扎了好几个小时,但我无法取得任何进展。

现在我已经将我的问题归结为简单的(也许?)任务,即尝试让 PHP 脚本在 localhost 上运行 .bat 程序。我正在使用 WAMP。

这是我当前的 PHP 文件:

<?php system('cmd /c C:\Users\user\Desktop\open.bat'); ?>

这就是其中的全部内容。我在桌面上的 .bat 文件包含:

notepad.exe C:\Users\user\Desktop\test.txt

然后我在桌面上有一个名为 test.txt 的简单文本文件。我可以从命令行运行 .bat 文件,它工作正常,但 PHP 中没有。

这里有许多其他线程询问如何从 PHP 运行 .bat(例如:How do you run a .bat file from PHP?),我已经尝试了几乎所有我在网上读到的技术,但没有任何效果。

例如,我试过了

exec('open.bat')(与.bat在同一目录下),shell_exec(),文件位置、路径的变化,真不知道是怎么回事。我没有在安全模式下运行 PHP。

也许我应该知道一些配置可以让它运行?或者也许我错过了一些非常明显的东西......

【问题讨论】:

  • 执行时有什么错误吗?还是只是空白结果?
  • 只是空白结果;控制台或我能看到的其他任何地方都没有错误。
  • note 我尝试将 .bat 放在与 PHP 文件相同的目录中,并将其内容更改为 exec('open.bat'); - 如果它现在卡在“等待 localhost”这会改变任何事情......

标签: php batch-file exec


【解决方案1】:

您可能没有看到记事本在运行,因为它是一个交互式程序,并且网络服务器(正在尝试启动它)在与 所在的用户会话不同的用户会话中运行。在这种情况下,从命令行执行相同的操作(例如使用php -f)将起作用。

【讨论】:

  • 在这种情况下 shellrunas 可能会帮助你:technet.microsoft.com/en-us/sysinternals/cc300361.aspx
  • 我刚刚在 Apache 中发现了“允许 Apache 与桌面通信”的设置 - 在设置该设置并重新启动 WAMP 之后,.bat 至少会运行!
  • 所以我认为它在正确的用户下运行。但是,它现在打开了“交互式服务检测”(一个 Windows 实用程序),它告诉我“在这台计算机上运行的程序正试图显示一条消息”,这可能是因为“程序可能与 Windows 不兼容”。当我单击“查看消息”时,它会退出 Windows 资源管理器并将我带到一个带有记事本文件的空白蓝屏 - 所以它打开了!但以一种非常奇怪的方式。我真的不太确定这是怎么回事..
  • @Nik:运行 Apache 的用户有一个单独的桌面,这就是您所看到的。我不确定这里的细则,但你看过那个 shellrunas 链接吗?
  • 好的,我正在尝试使用 shellrunas - 交互式服务检测仍然打开,只是现在 shellrunas 正在其中运行,而不是 .bat
【解决方案2】:

您可以尝试使用start /b C:\Users\user\Desktop\open.bat 而不是cmd

您也可能需要转义斜杠,例如 \\ 而不是 \

所以,我建议你试试:

<?php system('start /b C:\\Users\\user\\Desktop\\open.bat'); ?>

【讨论】:

  • 但是单引号不允许转义字符对吧?
【解决方案3】:

试试这个....

<?php
$cmd = C:\Users\user\Desktop\open.bat;
function execInBackground($cmd) {
   if (substr(php_uname(), 0, 7) == "Windows"){
       pclose(popen("start /B ". $cmd, "r")); 
   }
   else {
       exec($cmd . " > /dev/null &");  
   }
}
execInBackground($cmd);
?>

更多请参考:http://php.net/manual/en/function.exec.php

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-25
    • 1970-01-01
    • 1970-01-01
    • 2017-07-10
    相关资源
    最近更新 更多