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直接执行命令行中的命令来完成调用

      测试结果:

      

      

  • 相关阅读:
    从倒水问题到欧几里得算法扩展
    uva 10651
    STC12C5201AD AD采样+串口发送模板
    [置顶] 中国象棋程序的设计与实现–楚汉棋兵(高级版)(源码)
    【Leetcode】Same Tree
    问卷调查模块实现的过程中的历程
    差一本CSS 3的书,有兴趣的作者来写
    [置顶] 网络认证小结——你有网络身份证吗?
    音乐播放器的实现(简易版)
    空格填充器(alignBySpace)
  • 原文地址:https://www.cnblogs.com/freeweb/p/5645699.html
Copyright © 2011-2022 走看看