9

我正在使用这个 php 代码:

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

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

4

6 回答 6

27

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

于 2009-01-13T11:02:23.697 回答
8

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

于 2010-11-17T07:59:57.557 回答
4

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

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

; Safe Mode
; http://www.php.net/manual/en/ini.sect.safe-mode.php#ini.safe-mode
safe_mode = Off
于 2012-05-22T17:22:26.250 回答
2

谢谢大家的回复!!

我试过这个

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

于 2009-01-13T11:25:38.080 回答
1

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

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() 再次工作。

于 2011-03-25T10:00:54.213 回答
0

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

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

于 2009-01-13T15:29:53.000 回答