php无法通过exec执行perl脚本

问题描述:

我试图从php执行perl脚本。 该perl脚本正在读取一个网页,并产生一些数据的XML文件。 如果我通过shell执行它,一切都按预期工作,但是当我试图通过php自动完成整个事情时什么都没有起作用。php无法通过exec执行perl脚本

我已经试过这样:

exec("perl /absolute/path/to/perl/script/parser.pl", $output, $result); 

当我回声$result变量它显示2。 我已经打开和关闭了php safe_mode几次,但没有任何改变。 也试图设置safe_mode_exec_dir没有积极的结果。

当我exec的一个简单的LS

exec("ls", $output, $result); 

一切顺利,我得到的文件列表和$result0

perl脚本有chmod 777,这样它就不会成为权限问题。他的文件夹也有777.

我几乎可以肯定,这个问题是关于服务器,但我无法找出什么。

任何帮助将非常感激。

谢谢

+0

什么时候'parser.pl'返回2?你确定你用正确的参数运行脚本吗? '$ output'中有什么?你的例子缺少一个结束双引号。 – Mikel 2011-02-23 23:04:40

+0

该脚本没有任何参数,我试图复制/粘贴,因为它是上面写的(显然是正确的路径)到shell中,它的工作原理。你是对的这个例子是缺少一个排队,但只是在SO内复制代码的问题,抱歉。 – Dalen 2011-02-23 23:07:15

+0

$ result应该包含被执行的命令的状态,似乎是2,但我不知道它是什么意思 – Dalen 2011-02-23 23:10:19

您可能需要指定perl可执行文件的完整路径。

尝试输入which perl以查看完整路径,然后将该完整路径放入exec调用中。

+0

perfekt!工作!非常感谢你! – Dalen 2011-02-23 23:19:22

您的示例似乎缺少第一个参数的结束引用。我也会确保perl的可执行文件在你的路径中。最后,文件夹不仅需要设置执行位,而且需要设置所有直到root的目录以允许perl访问脚本。一个目录相当普遍的是750,这样一个组可以进入,但不是世界。作为一个用户,你可以在那里看到脚本,但是你必须从执行脚本的用户的角度来看它 - 大概是你的web服务器运行的id。