php exec函数中的非法命令错误代码127

时间:2009-01-13 10:58:45

标签: php exec

我正在使用这个PHP代码:

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

并获取非法命令的错误代码,即127 ...但是当我通过ssh使用此命令时它正在工作...因为unrar安装在服务器上...所以任何人都可以猜到为什么exec没有这样做对吗?

6 个答案:

答案 0 :(得分:24)

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

答案 1 :(得分:7)

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

答案 2 :(得分:3)

由于这是谷歌的最佳答案,我想分享我的修复:

我的简单修复是禁用php.ini文件中的safe_mode

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

答案 3 :(得分:2)

thanx all for your response !!

我试过这个

//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

答案 4 :(得分:1)

万一其他人仍然遇到这个问题,请看一下这里的帖子:

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

引用:

  

我发现了问题。问题是我的安全偏执的OpenBSD。当从3.1升级到3.2时,他们补充说:

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

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

     

无论如何,使用-u选项运行httpd会回到不太安全的非chroot'd apache启动,这使得exec()可以再次运行。

答案 5 :(得分:0)

ohkiee guyz thanx ...是的,$ PATH可能会有一些错误...但是给定完整路径它的工作:)

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