【问题标题】:php can't execute a perl script via execphp 无法通过 exec 执行 perl 脚本
【发布时间】:2011-07-03 04:08:51
【问题描述】:

我正在尝试从 php 执行 perl 脚本。 该 perl 脚本正在读取网页并生成包含一些数据的 xml 文件。 如果我通过 shell 执行它,一切都按预期工作,但是当我试图通过 php 自动化整个事情时,没有任何效果。

我试过了:

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

当我回显$result 变量时,它显示2。 我已经多次打开和关闭 php safe_mode 但没有任何改变。 还尝试设置safe_mode_exec_dir 没有正面结果。

当我执行一个简单的 ls 时

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

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

perl 脚本具有 chmod 777,因此不会出现权限问题。他的文件夹也有777。

我几乎可以确定问题出在服务器上,但我无法找出原因。

任何帮助将不胜感激。

谢谢

【问题讨论】:

  • parser.pl什么时候可以返回2?您确定您正在使用正确的参数运行脚本吗? $output 有什么东西吗?而且您的示例缺少结束双引号。
  • 该脚本没有任何参数,我尝试将上面写的(显然使用正确的路径)复制/粘贴到外壳中并且它可以工作。你是对的,这个例子缺少一个 quete,但这只是在 SO 中复制代码的问题,对不起。
  • $result 应该包含执行命令的状态,似乎是 2,但我不知道这是什么意思
  • 如果您使用简单的 perl 脚本(例如exit(0);),这是否有效?这会让你知道它是在你的 Perl 脚本中,还是你根本无法执行 Perl。

标签: php perl exec


【解决方案1】:

您的示例似乎缺少第一个参数的结束引号。我还要确保 perl 的可执行文件在您的路径中。最后,不仅文件夹需要设置执行位,还需要设置直到根目录的所有目录以允许 perl 访问脚本。一个目录为 750 是相当常见的,这样一个组可以进入,但不是世界。作为用户,您可以 cd 到那里查看脚本,但您必须从执行脚本的用户的角度来看待它——大概是您的网络服务器正在运行的 id。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2010-10-08
      • 2013-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-21
      • 1970-01-01
      • 2012-10-09
      • 1970-01-01
      相关资源
      最近更新 更多