Я использую этот код php:
exec("unrar e file.rar",$ret,$code);
и получить код ошибки нелегальной команды, т. е. 127 … но когда я использую эту команду через ssh, она работает … потому что unrar установлен на сервере … так может кто-нибудь догадаться, почему exec не делает правильные вещи?
Попробуйте использовать прямой путь к приложению (/ usr / bin / unrar of any), похоже, что php не может найти приложение.
Если у вас есть chrooted apache и php, вы также захотите поместить / bin / sh в среду chrooted. В противном случае функции exec () или passthru () не будут работать должным образом и будут выдавать код ошибки 127, файл не найден.
Поскольку это появляется как главный ответ в google, я хотел бы поделиться своим исправлением:
Простое исправление, которое у меня было, – отключить safe_mode в файле php.ini
; Safe Mode ; http://www.php.net/manual/en/ini.sect.safe-mode.php#ini.safe-mode safe_mode = Off
спасибо всем за ваш ответ !!
Я попробовал это
// somedir находится внутри каталога, где php-файл ChDir ( "somedir"); exec ("/ home / username / bin / unrar e /home/path/to/dir/file.rar");
и теперь он не возвратил код выхода … oher команды делают файл .. я пробовал mkdir и т. д.: s
ohkiee guyz thanx … и да могут быть некоторые ошибки с $ PATH … но с заданным полным ходом его работа 🙂
exec ("/ home / user / bin / unrar e /home/user/xxx/yyy/file.rar");
На всякий случай кто-то еще столкнется с этой проблемой, посмотрите здесь:
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'd, что позволило exec () снова работать.