zoukankan      html  css  js  c++  java
  • 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
    ", argc-1);
        int a = atol(argv[1]);
        int b = atol(argv[2]);
        int sum = a + b;
        printf("%d
    ", 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直接执行命令行中的命令来完成调用

      测试结果:

      

      

  • 相关阅读:
    Hdu 5396 Expression (区间Dp)
    Lightoj 1174
    codeforces 570 D. Tree Requests (dfs)
    codeforces 570 E. Pig and Palindromes (DP)
    Hdu 5385 The path
    Hdu 5384 Danganronpa (AC自动机模板)
    Hdu 5372 Segment Game (树状数组)
    Hdu 5379 Mahjong tree (dfs + 组合数)
    Hdu 5371 Hotaru's problem (manacher+枚举)
    Face The Right Way---hdu3276(开关问题)
  • 原文地址:https://www.cnblogs.com/freeweb/p/5645699.html
Copyright © 2011-2022 走看看