2009-01-13 138 views
7

我使用這個PHP代碼:非法命令錯誤代碼127

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

和獲取非法命令的錯誤代碼,即127 ...但是當我通過ssh其工作使用此命令...因爲unrar被安裝在服務器上...所以任何人都可以猜測爲什麼exec沒有做正確的事情?

+0

剛一個想法:是file.rar絕對在運行php腳本的目錄中?並且是在PATH中的目錄中unrar? – Ben 2009-01-13 11:00:32

+0

yeah file.rar是在同一個目錄中... unrar被安裝在系統上...是否有任何特定的應該由php exec執行? – Intellex 2009-01-13 11:04:01

+0

我告訴它在通過ssh使用即時通訊終端工作正常 – Intellex 2009-01-13 11:04:43

回答

21

嘗試使用應用程序的直接路徑(/ usr/bin/unrar),它聽起來像php無法找到應用程序。

+0

我不得不同意它聽起來像包含unrar二進制文件的目錄不包括在PATH變種,所以使用直接路徑應該幫助,或者只是將二進制文件添加到目錄如果路徑無法找到。 – UnkwnTech 2009-01-13 11:16:34

3

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等:■

+0

順便說一句,這個命令直接運行在shell上 – Intellex 2009-01-13 12:29:27

1

ohkiee guyz感謝名單.. 。是的可能有一些錯誤與$ PATH ...但給予了充分的路徑它的工作:)

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

7

如果你有chrooted apache和php,你也會想把/ bin/sh放到chroot環境中。否則,exec()或passthru()將無法正常運行,並且會生成錯誤代碼127,找不到文件。

1

萬一人家仍然得到這個問題,看看這裏的職位:

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

4

由於該出現在谷歌頂部的答案,我想分享我的解決辦法:

簡單的修復我是在php.ini文件中禁用的safe_mode

; Safe Mode 
; http://www.php.net/manual/en/ini.sect.safe-mode.php#ini.safe-mode 
safe_mode = Off 
相關問題