【问题标题】:illegal command error code 127 in php exec functionphp exec函数中的非法命令错误代码127
【发布时间】:2009-01-13 10:58:45
【问题描述】:

我正在使用这个 php 代码:

exec("unrar e file.rar",$ret,$code);

并获得非法命令的错误代码,即 127 ...但是当我通过 ssh 使用此命令时,它的工作...因为服务器上安装了 unrar ...所以任何人都可以猜到为什么 exec 不执行正确的东西?

【问题讨论】:

  • 只是一个想法:file.rar 是否肯定在运行 php 脚本的同一目录中?并且在 PATH 中的目录中解压缩?
  • 是的file.rar在同一个目录下... unrar安装在系统上...有什么具体的应该由php exec执行吗?
  • 我告诉它在我通过 ssh 使用的终端上工作正常

标签: php exec


【解决方案1】:

尝试使用应用程序的直接路径(/usr/bin/unrar 之类的),听起来 php 找不到应用程序。

【讨论】:

  • 我必须同意这听起来好像包含 unrar 二进制文件的目录不包含在 PATH var 中,因此使用直接路径应该会有所帮助,或者如果找不到路径,只需将二进制文件添加到目录中.
【解决方案2】:

由于这是谷歌的最佳答案,我想分享我的解决方法:

我的简单解决方法是在 php.ini 文件中禁用 safe_mode

; Safe Mode
; http://www.php.net/manual/en/ini.sect.safe-mode.php#ini.safe-mode
safe_mode = Off

【讨论】:

【解决方案3】:

如果你有 chrooted apache 和 php,你还需要把 /bin/sh 放到 chrooted 环境中。否则,exec() 或 passthru() 将无法正常运行,并会产生错误代码 127,找不到文件。

【讨论】:

    【解决方案4】:

    以防万一其他人仍然遇到此问题,请查看此处的帖子:

    http://gallery.menalto.com/node/2639#comment-8638

    引用:

    我发现了问题。问题出在我的安全偏执的 OpenBSD 上。从 3.1 升级到 3.2 时,他们添加了:

    • Apache 默认运行 chroot'd。要禁用此功能,请参阅新的 -u 选项。

    chroot 阻止 Apache 访问目录之外的任何内容,因此我将所有内容都移到了 apache 目录中,包括 netpbm。一切都可以访问和执行,但我猜它仍然处于某种“安全模式”,因为 exec() 总是返回 127。

    无论如何,使用 -u 选项运行 httpd 会返回到安全性较低的非 chroot'd apache 启动,这允许 exec() 再次工作。

    【讨论】:

      【解决方案5】:

      谢谢大家的回复!!

      我试过了

      //somedir is inside the directory where php file is
      chdir("somedir");
      exec("/home/username/bin/unrar e /home/path/to/dir/file.rar");
      

      现在它没有返回退出代码……其他命令正在执行文件……我尝试了 mkdir 等……:s

      【讨论】:

        【解决方案6】:

        ohkiee guyz thanx ... 是的,$PATH 可能存在一些错误 ...但是在给定完整路径的情况下它可以工作:)

        exec("/home/user/bin/unrar e /home/user/xxx/yyy/file.rar");
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-03-04
          • 2014-11-18
          • 2021-06-26
          • 2015-09-06
          • 2015-10-30
          相关资源
          最近更新 更多