2010-02-09 35 views
18

我測試的PHP exec命令:PHP的return_var代碼?

http://php.net/exec

,我發現返回的127

我的PHP代碼的結果代碼是:

<? 

print "<br>executing 'hello':<br><b>"; 
exec ("hello", $output, $result); 
var_dump($output); 
print "<br>$result"; 
print "<br></b>end hello."; 


print "<br><hr><br>"; 


print "<br>executing 'dir':<br><b>"; 
exec("dir", $output2, $result2); 
var_dump($output2); 
print "<br>$result2"; 
print "<br></b>end dir."; 

?> 

而輸出是:

executing 'hello': 
array(0) { } 
127 
end hello. 


executing 'dir': 
array(2) { [0]=> string(42) "bs1.jpg hello index.htm ml1_1.jpg pp1.jpg" } 
0 
end dir. 

The php文檔(只要我能找到)這樣說:

return_var

如果return_var參數 與輸出 參數一起存在,那麼 返回狀態執行的命令將被寫入 到這個變量。

...但沒有輸出可能性列表或查找它們的方法。

有什麼建議嗎?

回答

18

返回碼可能有點武斷。基本上,任何非零返回值都是一個錯誤。但通常情況下,除非您使用特定的程序,否則更容易假設非零=發現了一些錯誤,而不是試圖將許多不同的程序映射到特定的錯誤代碼。

9

返回碼127表示無法找到指定的過程。

假設你是在Windows,Windows System Error Codes

+0

不應該是_command找不到_或_illegal command_? – 2010-02-09 16:26:47

+1

我在Linux上,但是幫了很多! http://www.faqs.org/docs/abs/HTML/exitcodes.html – 2010-02-09 23:34:39

1

exec()在外部文件上運行,並從那裏或從操作系統接收返回代碼。如果127來自操作系統,則表示該文件未在您定義的路徑中找到。

另一方面,如果127來自正在運行的應用程序,則必須檢查該應用程序的文檔以瞭解其含義。

3

返回值是完全任意的。當你編寫一個程序時,你可以讓它返回你想要的任何值。在PHP中,你可以用exit語言構造做到這一點:

<?php 
exit(33); 

你可以找出它的文檔特定的軟件的確切身份代碼(假設筆者實際記錄它)。然而,人們普遍認爲0代表「OK」,其他意思是「存在問題」,因此檢查0通常就足夠了。

在你的情況下,它看起來像你試圖執行一個不存在的程序。 PHP通過系統shell執行外部程序,所以該值可能來自bash或任何默認shell。在Unix中,有一些exit codes with special meanings和意味着命令未找到