我有以下脚本:
#!/bin/sh
export DISPLAY=:0
phantomjs --version
尝试从以下PHP脚本运行它:
<?php
$result = shell_exec('sh test.sh');
echo $result;
?>
此脚本返回以下错误:
[Thu Jun 19 10:31:31 2014] [error] [client] test.sh: line 3: phantomjs: command not found
我试图在控制台中手动运行phantomjs -v
,它运行正常。我检查了PATH
,并正确定义并找到了phantomjs。
执行环境是带有LiveConfig的虚拟服务器。 有人能帮我理解我做错了吗?
答案 0 :(得分:3)
这可能是shell_exec()和换行符的问题, 尝试添加&#34; 2&gt;&amp; 1&#34;到你传递的字符串:
$result = shell_exec('sh test.sh 2>&1');
这对我有用,在最高评论here, naturally ;)
中找到了它答案 1 :(得分:0)
您的PATH
可能缺少phantomjs可执行文件的位置。 PhantomJS可能安装在/usr/local/bin
中,因此您需要将其添加到PATH
变量中:
#!/bin/sh
export DISPLAY=:0
PATH=$PATH:/usr/local/bin
phantomjs --version
要检查当前PATH
的内容,您可以使用以下命令开始使用shell脚本:
#!/bin/sh
echo $PATH
答案 2 :(得分:0)
<?php
exec('/usr/local/bin/phantomjs path/somescript.js');
?>
是。有时phantomjs在某些环境中不需要完整路径而不会产生任何错误。但是,有时它确实如此。
始终在php命令中使用所有参数的完整路径。
您是否使用了hello.js的完整路径?
答案 3 :(得分:-1)
不要使用exec()。决不。这是一个糟糕的方式。