我正在使用这个PHP代码:
exec("unrar e file.rar",$ret,$code);
并获取非法命令的错误代码,即127 ...但是当我通过ssh使用此命令时它正在工作...因为unrar安装在服务器上...所以任何人都可以猜到为什么exec没有这样做对吗?
答案 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");