【问题标题】:Windows PHP exec / shell_exec with phantomjs always returns null带有phantomjs的Windows PHP exec / shell_exec总是返回null
【发布时间】:2013-02-23 02:00:55
【问题描述】:

我在 Windows 服务器上运行 PHP 5.4.9

我已经尝试在 PHP 中运行所有脚本命令(exec、shell_exec、system、proc_open、passthru)。所有似乎都返回空或 null。

我已将 phantomjs 添加为 PATH 变量。

在命令提示符下运行phantomjs --version,它返回1.8.2

虽然当我尝试运行时

$return = exec("phantomjs --version")

$return = shell_exec("phantomjs --version", $output)

$return 始终为空,$output 为空。

我确保 IUSR 和 IIS_IUSRS 用户有权运行 phantomjs.exe

安全模式在 php.ini 中被禁用

另外,我尝试运行 exec('ls') && exec('ipconfig /all'),然后输出我期望的数据。

我不确定还可以尝试什么。

【问题讨论】:

  • 你确定 phantomjs 在被服务器执行()的 shell 路径中吗?只是因为它在您帐户的路径中,它可能不在 IUSR_IIS 帐户的路径中。
  • 尝试以下操作,看看是否填充了 $out 或 $ret。 $out 将是一个数组。 exec('phantomjs --version'.' 2>&1',$out,$ret);
  • 路径在系统变量->路径变量中。
  • 使用Gavin的推荐时,$out返回一个空数组,$ret为1。 exec('phantomjs --version'.'2>&1',$out,$ret); out: array(0) { } ret: int(1)
  • 不是特别有用,但我可以告诉你 1 是一个错误代码(应该是 0)并且 $out 应该已经捕获到标准输出的任何输出,所以看起来没有。如果您可以控制服务器,请尝试将 php 进程设置为在系统帐户下运行(仅用于测试)以清除权限问题的疑虑。

标签: php windows exec phantomjs


【解决方案1】:

我遇到了同样的问题.. 事情是phantomjs需要完整的路径 这是我想出的解决方案:

$getout = exec('D:\\xampp\\htdocs\\phantomjsdir\\phantomjs.exe D:\\xampp\\htdocs\\rasterisejsdir\\rasterize.js http://localhost/pagetobecaptured/test D:\\xampp\\htdocs\\outputfiledir\\test2.jpg "1800px*840px"',$o,$e);

【讨论】:

  • 好吧,我把 phantomjs.exe 的路径放到我的 PATH 系统变量中。使用 CLI 可以立即访问它。但是如果不使用可执行文件的完整路径(就像您编写的那样),它在我在本地系统帐户下运行的 Apache 中不起作用。所以我认为 Apache 服务可能需要以某种方式使用新的 PATH 进行更新 - 通过重新启动 PC 或重新启动服务本身。后者奏效了。 :)
【解决方案2】:

您已经非常接近解决方案了。基本上是:

$stdout = shell_exec('time /T');
echo $stdout;

您需要确保 Phantom 二进制文件位于路径上或使用完整路径调用。

有关执行 PhantomJS 的完整示例,请参阅driver file of "jakoch/PHPUnit-headless"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多