我使用這個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