我使用这个PHP代码:非法命令错误代码127
exec("unrar e file.rar",$ret,$code);
和获取非法命令的错误代码,即127 ...但是当我通过ssh其工作使用此命令...因为unrar被安装在服务器上...所以任何人都可以猜测为什么exec没有做正确的事情?
我使用这个PHP代码:非法命令错误代码127
exec("unrar e file.rar",$ret,$code);
和获取非法命令的错误代码,即127 ...但是当我通过ssh其工作使用此命令...因为unrar被安装在服务器上...所以任何人都可以猜测为什么exec没有做正确的事情?
尝试使用应用程序的直接路径(/ usr/bin/unrar),它听起来像php无法找到应用程序。
我不得不同意它听起来像包含unrar二进制文件的目录不包括在PATH变种,所以使用直接路径应该帮助,或者只是将二进制文件添加到目录如果路径无法找到。 – UnkwnTech 2009-01-13 11:16:34
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");
,现在没有返回退出代码... oher命令做文件..我试过的mkdir等:■
顺便说一句,这个命令直接运行在shell上 – Intellex 2009-01-13 12:29:27
ohkiee guyz感谢名单.. 。是的可能有一些错误与$ PATH ...但给予了充分的路径它的工作:)
exec("/home/user/bin/unrar e /home/user/xxx/yyy/file.rar");
如果你有chrooted apache和php,你也会想把/ bin/sh放到chroot环境中。否则,exec()或passthru()将无法正常运行,并且会生成错误代码127,找不到文件。
万一人家仍然得到这个问题,看看这里的职位:
http://gallery.menalto.com/node/2639#comment-8638
报价:
我发现这个问题。问题是我的安全偏执的OpenBSD。当从3.1升级到3.2时,他们添加了:
- Apache默认运行chroot'd。要禁用此功能,请参阅新的-u选项。
chroot阻止Apache访问目录之外的任何内容,所以我将所有内容都移动到了包括netpbm在内的apache目录中。一切都是可访问和可执行的,但我想它仍然处于某种“安全模式”,因为exec()总是返回127.
无论如何,使用-u选项运行httpd会返回到安全性较低的非chroot 'apache启动,它允许exec()再次工作。
由于该出现在谷歌顶部的答案,我想分享我的解决办法:
简单的修复我是在php.ini文件中禁用的safe_mode
; Safe Mode
; http://www.php.net/manual/en/ini.sect.safe-mode.php#ini.safe-mode
safe_mode = Off
刚一个想法:是file.rar绝对在运行php脚本的目录中?并且是在PATH中的目录中unrar? – Ben 2009-01-13 11:00:32
yeah file.rar是在同一个目录中... unrar被安装在系统上...是否有任何特定的应该由php exec执行? – Intellex 2009-01-13 11:04:01
我告诉它在通过ssh使用即时通讯终端工作正常 – Intellex 2009-01-13 11:04:43