недопустимый код ошибки команды 127 в функции php exec - PullRequest
8 голосов
/ 13 января 2009

Я использую этот код php:

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

и получение кода ошибки недопустимой команды, т.е. 127 ... но когда я использую эту команду через ssh, она работает ... потому что на сервере установлен unrar ... так что любой может догадаться, почему exec не выполняет правильно?

Ответы [ 6 ]

24 голосов
/ 13 января 2009

Попробуйте использовать прямой путь к приложению (/ usr / bin / unrar), похоже, php не может найти приложение.

7 голосов
/ 17 ноября 2010

Если у вас есть chrooted apache и php, вы также захотите поместить / bin / sh в chrooted окружение. В противном случае exec () или passthru () не будут работать должным образом и выдадут код ошибки 127, файл не найден.

3 голосов
/ 22 мая 2012

Поскольку в Google это лучший ответ, я хотел бы поделиться своим исправлением:

У меня было простое исправление: отключить safe_mode в файле php.ini

; Safe Mode
; http://www.php.net/manual/en/ini.sect.safe-mode.php#ini.safe-mode
safe_mode = Off
2 голосов
/ 13 января 2009

Спасибо всем за ваш ответ !!

Я пробовал это

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

1 голос
/ 25 марта 2011

На случай, если кто-то еще по-прежнему сталкивается с этой проблемой, посмотрите на сообщение здесь:

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

Цитата:

Я нашел проблему. Проблема была в моей безопасности-параноике OpenBSD. При обновлении с 3.1 до 3.2 добавлено:

  • Apache запускает chroot'd по умолчанию. Чтобы отключить это, смотрите новую опцию -u.

chroot препятствовал доступу Apache к чему-либо вне каталога, поэтому я переместил все в каталог apache, включая netpbm. Все было доступно и выполнимо, но я думаю, что он все еще находился в каком-то «безопасном режиме», потому что exec () всегда возвращал 127.

В любом случае, запуск httpd с параметром -u вернул к менее безопасному запуску apache без chroot, что позволило exec () снова работать.

0 голосов
/ 13 января 2009

ohkiee guyz thanx ... и да, могут быть некоторые ошибки с $ PATH ... но при заданном полном пути он работает:)

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...