【问题标题】:PHP exec not working for compiling on Windows 8 through Visual Studio 2012 Command PromptPHP exec 无法通过 Visual Studio 2012 命令提示符在 Windows 8 上编译
【发布时间】:2014-04-21 18:47:17
【问题描述】:

感谢您今天抽出时间来帮助我。我有一个我希望是一个简单的问题。我一直在尝试使用 php exec() 或任何相关的 PHP 命令来打开 Visual Studio 2013 的开发人员命令提示符,并使用它来编译文件并将输出保存到本地计算机上的文件中。我让它在 Windows 上运行正常,但我似乎无法让它与 PHP exec() 一起工作。这是我当前设置命令的方式。

$cmd = 'C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\Tools\VsDevCmd.bat && cd C:\wamp\www\csc424Try3\app\uploads && cl /EHsc basic.cpp && basic >> C:\wamp\www\csc424Try3\app\outputs\output.txt';

exec($cmd, $result);

如您所见,我将命令链接在一起。第一个命令允许打开提示符,第二个命令更改到正确的目录,第三个命令在提示符下运行编译命令,第四个输出到文本文件。

任何想法我哪里出错了?我感觉它与格式化有关,但也许将命令链接在一起在 PHP 中不像在系统上那样工作。

【问题讨论】:

    标签: php windows compilation visual-studio-2013 exec


    【解决方案1】:

    您忘记了 exec 调用字符串中大多数参数的引号,这意味着像 Program Files 这样的东西将被视为两个独立的东西,而不是一个目录。

    $cmd = '"C:\Program Files (x86)\....VsDevCmd.bat" && etc...';
            ^--                                     ^-- need these
    

    实际上,您正在尝试执行一个名为 C:\Program 的程序,并带有一些额外的参数,例如 Files (x86)\.....

    【讨论】:

    • 我明白你的意思了!我什至没有考虑过,所以谢谢你。我试了一下,我的命令现在如下所示。 $cmd = '"C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\Tools\VsDevCmd.bat" && "cd C:\wamp\www\csc424Try3\app\uploads" && "cl /EHsc basic. cpp" && "基本>> C:\wamp\www\csc424Try3\app\outputs\output.txt"';我仍然得到相同的结果,但是文件没有编译。 :( 也许这与我用 && 链接命令的方式有关?
    • 您是在网络服务器下运行它吗?请记住,Web 服务器用户(例如 IUSR_IIS)的权限非常有限,甚至可能无权访问/执行批处理文件,更不用说实际编译/编写新文件了。
    • 在双引号字符串中的 Windows 上的 PHP 路径中使用反斜杠也要非常小心。这里不是这样,但如果你有类似"c:\tabulations" 的东西,\t 将被视为制表符,而不是字母 t。一般来说,您应该对所有路径使用正斜杠 - PHP 会自动为您转换为特定于操作系统的分隔符。
    • 我通过 wampserver 在 localhost 上运行它。我从来没有考虑过权限可能会受到限制。我将不得不研究并看看是否有办法绕过t。另外,谢谢你让我知道反斜杠!我不知道,所以我现在会记住它。
    • 所以,我避开了反斜杠,也尝试了正斜杠。不幸的是,它没有用!现在看起来像这样。 $cmd = '"C:\\Program Files (x86)\\Microsoft Visual Studio 12.0\\Common7\\Tools\\VsDevCmd.bat" && "cd C:\\wamp\\www\\csc424Try3\\app\ \uploads" && "cl /EHsc basic.cpp" && "basic >> C:\\wamp\\www\\csc424Try3\\app\\outputs\\output.txt"';执行($cmd);现在,关于 IIS 的想法,我当时正在通过 Wampserver 运行并且根本没有启动 IIS。我拥有对我使用的特定文件夹的权限,也允许完全访问!
    【解决方案2】:

    经过一番研究,我找到了自己问题的答案。我之前尝试这样做的方式不起作用。与同事交谈后,我认为为后台编写一个 .bat 文件会更好,而且确实如此。我在 .bat 文件中编写了命令链并按如下方式执行它;

    system("cmd /c C:\wamp\www\csc424Try3\app\uploads\stuff.bat");

    成功!现在可以从 PHP 成功编译和运行该文件。 :) 这是美好的一天。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多