php調用c/c++的一種方式


  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直接執行命令行中的命令來完成調用

  測試結果:

  

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM