PHP提供共了3個專門的執行外部命令的函數:system(),exec(),passthru()。參考:http://www.jb51.net/article/19618.htm
區別:
system() 輸出並返回最后一行shell結果。
exec() 不輸出結果,返回最后一行shell結果,所有結果可以保存到一個返回的數組里面。
passthru() 只調用命令,把命令的運行結果原樣地直接輸出到標准輸出設備上。
相同點:都可以獲得命令執行的狀態碼
exec()
原型:string exec (string command [, string array [, int return_var]])
exec()執行外部命令失敗,但沒有任何錯誤信息。參考:http://www.jb51.net/article/110108.htm
exec執行某命令在命令行下沒有問題,但是在php中就出錯。這個問題99.99%與權限有關,但是exec執行的命令不會返回錯誤。一個技巧就是使用管道命令,假設你的exec調用如下:
1
|
exec ( 'convert a.jpg b.jpg' , $output , $return_val );
|
可以更改如下:
1
2
3
4
|
exec ( 'convert a.jpg b.jpg 2>&1' , $output , $return_val );
print_r( $output );
|
使用 2>&1,命令就會輸出shell執行時的錯誤到$output變量, 輸出該變量即可分析。
備注: exec有3個參數,第一個是要執行的命令,第二個是參數是一個數組,數組的值是由第一個命令執行后生成的,第三個參數執行的狀態,0表示成功,其他都表示失敗。
passthru()
原型:void passthru (string command [, int return_var])
system()
原型:string system (string command [, int return_var])