내 서버 (Ubuntu 14.04.4 LTS)에는 Firefox가 설치되어 있으며, 헤드리스 Firefox 작동에는 xvfb
이, SlimerJS에는 CasperJS가 설치되어 있습니다. 나는 또한 잘 작동 CasperJS 스크립트가 있습니다. PHP에서이 스크립트를 활용하고 싶습니다. 문제는이에 대한 내 PHP 스크립트의 본질이다,의는 mytest.php
를 호출하자웹 서버에서 PHP를 통해 SlimerJS + headless Firefox 스크립트를 실행 하시겠습니까?
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 스크립트를 실행하면 3,691,363,210
, 즉 CLI 모드에서 PHP 통해 :
$ php 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
를 추가 한 후 : 내가 웹 서버를 통해 온라인으로이 PHP 스크립트를 호출 할 때
그러나, 그게 오류와 첫번째 실패, http://example.com/mytest.php
를 통해입니다 이상), 나는 또한이 오류 :
JavaScript error: resource://gre/modules/FileUtils.jsm, line 63: NS_ERROR_FAILURE: Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsIProperties.get]
그래서, PHP는 웹 서버를 통해 호출 파이어 폭스가 실행하지 않는 분명히 내 헤드리스는 (이 경우, PHP는)가 apache2handler
SAPI를 사용하여보고합니다.
왜 이런 일이 일어날 지 아무도 알 수 있습니까? PHP CLI 모드에서 실행될 때와 마찬가지로 웹 서버에서 호출 할 때 스크립트가 올바르게 실행되도록하려면 어떻게해야합니까?
편집 2 : 이제 CLI 모드를 통해이 오류를 재구성 할 수 있으며 사용자가이를 확인할 수 있습니다. 그래서 $command
에서 제공하는 JS 스크립트없이, 나는이 얻을 :
$ 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
첫 번째 생각 :'cli' 모드에서 스크립트를 실행하는 파일 권한은 사용자를 실행하지만 웹 서버를 통해 사용자는'www-data'가됩니다. 가능하지? –
사실, @ php-dev,하지만 난 정말 누군지 권한 문제가 될 알아낼 수 없습니다; 여기서 나는'xvfb-run'을 호출합니다. 이것은'casperjs'를 호출하는데, slimerjs를 호출하여 headless Firefox를 호출합니다. 이러한 경우에 권한 오류를 확인하는 방법이 있습니까? 나는'/ var/log/apache2/error-mysite.log'를 시도했지만'shell_exec' 호출이 실패하면'비 객체의 속성을 얻으려는 것'과 같은 PHP 물건 만보고합니다. – sdbbs
'stderr' 출력을'stdout' 또는 파일로 재지향하십시오. –