php調用c/c++有很多方式,最常用的是通過tcp或者http去調用,通過發送請求去調用c/c++編寫的cgi/fastcgi來實現,另外php還有一種直接執行外部應用程序的方式,這種方式會影響到系統安全,容易被攻擊者利用,所以使用的時候要謹慎處理好用戶輸入
php執行外部二進制命令的函數有好幾個,比如exec和passthru,並且passthru函數能執行命令並且可以返回外部命令的輸出,所以本次就使用passthru來實現,php調用c/c++函數的目的就是處理復雜計算時提高計算效率,從而提高整體的系統性能,下面是一個簡單的測試案例
首先編寫一個test.c源文件,處理很簡單就是對兩個整數進行加法運算,代碼如下:
#include<stdio.h> int main(int argc, char **argv) { //printf("參數個數:%d\n", argc-1); int a = atol(argv[1]); int b = atol(argv[2]); int sum = a + b; printf("%d\n", sum); return 0; }
保存后,執行編譯: gcc test.c -o test 編譯后會在當前目錄下生成test可執行文件,通過 ./test 5 12 可以執行文件看到輸出17
然后寫表單和php代碼,為了簡單,當前目錄就是web訪問根目錄,實際中要把C/C++項目放在web訪問目錄之外,在php中使用絕對路徑調用
表單form.html代碼:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>php調用c/c++案例</title> </head> <body> <form method="post" action="add.php"> <div> 請輸入兩個整數: <input type="text" name="a" /> + <input type="text" name="b" /> <input type="submit" value="相加" /> </div> </form> </body> </html>
php處理程序add.php代碼:
<?php header("Content-Type:text/html; charset=utf-8"); if(isset($_POST['a']) && isset($_POST['b']) && !empty($_POST['a']) && !empty($_POST['b'])) { $command = './test '.$_POST['a'].' '.$_POST['b']; $result = passthru($command); print_r($result); } else { echo "輸入不能為空!"; } ?>
可以看出,在add.php中就是通過passthru直接執行命令行中的命令來完成調用
測試結果: