php執行外部程式用system還是exec?
因為Third Parpty提供的API是C++而網站是採用PHP,網站要對接Third Party系統,就要先將C++程式寫好並編譯成Console類型的執行檔,透過命令列參數將外部參數傳入執行檔內執行。
接者要將執行檔的命令列整合到php網站,這時就要用到php呼叫外部程式的函數,有system()、exec()、shell_exec()三種,一般常用的就是system()和exec(),這三種函數主要差異在於執行後會不會顯示輸出,以及將回覆和輸入值存入變數的方式。
以下就來了解system()和exec()的使用時機及存入變數的方式。
例如:xxx.exe 參數1 參數2 .... 參數n
參數間用空格區隔。
參數間用空格區隔。
接者要將執行檔的命令列整合到php網站,這時就要用到php呼叫外部程式的函數,有system()、exec()、shell_exec()三種,一般常用的就是system()和exec(),這三種函數主要差異在於執行後會不會顯示輸出,以及將回覆和輸入值存入變數的方式。
以下就來了解system()和exec()的使用時機及存入變數的方式。
C++執行檔名詞定義
- 輸出:用printf()之類顯示在螢幕上的命令。
- 回覆值:用return回覆的cdoe,通常是數值
個人是C++生手目前接觸都只是回覆數值
system()
- 會顯示執行檔的所有輸出內容。
- 優點:
使用簡單,適合不在意有沒有顯示輸出內容時。 - 注意事項
若執行檔有使用printf()輸出時,system()函數執行後以header()轉頁時會出現Warning: Cannot modify header information - headers already sent by...錯誤
這時只能用exec()才能避免轉頁失敗問題。 - $last_line=system(xxx.exe 參數1 參數2 .... 參數n, $return_code)
$last_line:存入最後一行輸出的內容。
$return_code:回覆值。
exec()
- 不會顯示執行檔的輸出內容。
- 優點:
不會顯示輸出內容,適合對方用curl回傳或不能直接顯示執行檔輸出內容時。 - $last_line=exec(xxx.exe 參數1 參數2 .... 參數n, $output_array, $return_code)
$last_line:存入最後一行輸出的內容。
$return_code:回覆值。
$output_array:以矩陣方式存入輸出內容。
就可依當時需求選擇適合的函數使用。