在我的服务器(Ubuntu 14.04.4 LTS)上,我安装了 Firefox,以及xvfb
用于无头 Firefox 操作,以及带有 SlimerJS 的 CasperJS。我也有一个运行良好的 CasperJS 脚本。我想从 PHP 中使用这个脚本;这是我的 PHP 脚本的精髓,我们称之为mytest.php
:
echo "php_sapi_name() " . php_sapi_name() . "\n"; // "cli" for php cli, "apache2handler" for php via webserver
chdir(dirname(__FILE__));
$nodeModPath = "/home/USERNAME/.nvm/versions/node/v4.0.0/lib/node_modules";
putenv("SLIMERJSLAUNCHER=/usr/bin/firefox46");
$cmdline = "xvfb-run $nodeModPath/casperjs/bin/casperjs --engine=slimerjs --debug=true mySlimerScript.js";
$returnString = shell_exec($cmdline);
echo "$returnString\n";
编辑:请注意,该命令也可以是:
$cmdline = "xvfb-run $nodeModPath/casperjs/bin/casperjs --engine=slimerjs --debug=true 2>&1";
...也就是说,没有列出任何 JS 脚本 - 在这种情况下,应该转储帮助(并且是,在 CLI 访问的情况下 - 但通过网络服务器访问时报告与以下相同的错误)
当我从终端命令行(通过 SSH)运行这个 PHP 脚本时,即在 CLI 模式下通过 PHP:
$ php mytest.php
...一切运行良好,没有任何问题。
但是,当我通过网络服务器(即 via )在线调用此 PHP 脚本时http://example.com/mytest.php
,它首先失败并出现错误:
Gecko error: it seems /usr/bin/firefox46 is not compatible with SlimerJS.
See Gecko version compatibility. If version is correct, launch slimerjs
with --debug=true to see Firefox error message
...并且在添加--debug=true
(如上面的示例中已包含)之后,我还收到此错误:
JavaScript error: resource://gre/modules/FileUtils.jsm, line 63: NS_ERROR_FAILURE: Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsIProperties.get]
因此,当通过网络服务器调用 PHP 时,显然我的无头 Firefox 不想运行(在这种情况下,PHP 报告它使用apache2handler
SAPI)。
有谁知道为什么会发生这种情况 - 当从网络服务器调用时,我怎样才能让脚本正确执行,就像它在 PHP CLI 模式下运行一样?
编辑 2:现在也可以通过 CLI 模式重建此错误,并且可以确认它是由于用户造成的;所以没有提供任何 JS 脚本$command
,我得到这个:
$ sudo -H -u root php mytest.php
...
Usage: casperjs [options] script.[js|coffee] [script argument [script argument ...]]
casperjs [options] test [test path [test path ...]]
casperjs [options] selftest
...
$ sudo -H -u www-data php mytest.php
JavaScript error: resource://gre/modules/FileUtils.jsm, line 63: NS_ERROR_FAILURE: Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsIProperties.get]
Gecko error: it seems /usr/bin/firefox46 is not compatible with SlimerJS.
See Gecko version compatibility. If version is correct, launch slimerjs
with --debug=true to see Firefox error message