php執行外部程式用system還是exec?

因為Third Parpty提供的API是C++而網站是採用PHP,網站要對接Third Party系統,就要先將C++程式寫好並編譯成Console類型的執行檔,透過命令列參數將外部參數傳入執行檔內執行。
例如: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:以矩陣方式存入輸出內容。
就可依當時需求選擇適合的函數使用。


這個網誌中的熱門文章

沒印表機沒關係 便利商店找印去

被時代淘汱的英文怎麼說

探訪神秘的烏法魯神殿

色情廣告視窗關不掉? 動手解解看吧~

玩轉水晶石工作室 妝點個人部落