exec(“ls”)有效。 exec(“其他命令”)没有

时间:2011-06-06 20:44:13

标签: php exec

如果我把它放在我的剧本中:

$output = array();
exec("/var/www", $output);
var_dump($output);

我得到该文件夹​​中所有文件的数组。

然而,当我这样做时:

$output = array();
exec("../node_modules/less/bin/lessc ./default.less", $output);
var_dump($output);

我得到的输出是

  

array(0){}

如果我在命令行中运行相同的命令(来自同一目录,我的php脚本在中),它可以正常工作。

我也试过绝对路径:

  

/ var / www / node_modules / less / bin / lessc /var/www/nodeless/default.less

以下是这些文件的权限:

  

drwxr-xr-x 2 ftpuser ftpuser 4096 2011-06-06 16:43无节点

     

drwxr-xr-x 4 ftpuser www-data 4096 2011-06-06 15:44 node_modules

为什么我不能用PHP做到这一点?

3 个答案:

答案 0 :(得分:4)

不要使用相对路径。使用dirname(__FILE__)查找PHP脚本的路径,然后从中构建绝对路径。例如:

$lessc = dirname(__FILE__) . '/../node_modules/less/bin/lessc';

答案 1 :(得分:0)

我们不会给出确切的答案,因为我们不知道您的服务器是如何配置的,但您必须确定PHP的路径是什么,然后适当地修复路径。最好的方法是使用绝对路径,因为它们总能正确解析。

答案 2 :(得分:0)

我真的应该从 Radu Tomalak Geret'kal 的帮助中找到问题的解决方案。然而,正如Radu的答案目前所说,它没有描述解决我的问题的原因。所以我将在这里解释一下。

我尝试使用与PHP( www-data )相同的用户SSH连接到服务器并执行相同的命令。我收到了这个错误:

  

/ usr / bin / env:node:没有这样的文件或目录

当我第一次安装node.js时,我所遵循的说明告诉我将路径添加到 $ PATH 环境变量中。但是,这是与 www-data 不同的用户,因此在使用 www-data 用户时,节点的路径不再位于我的$ PATH中。

我不是这方面的专家,但我认为这可能是问题所在。所以我开始关注installation instructions for node.js,只是这次作为 www-data 用户。

然后我可以在命令行上执行命令 www-data 。所以我再次尝试了我的PHP脚本。它现在也有效。

相关问题