分享

php调用c/c 的一种方式

 啊司com 2017-02-13

  php调用c/c++有很多方式,最常用的是通过tcp或者http去调用,通过发送请求去调用c/c++编写的cgi/fastcgi来实现,另外php还有一种直接执行外部应用程序的方式,这种方式会影响到系统安全,容易被攻击者利用,所以使用的时候要谨慎处理好用户输入

  php执行外部二进制命令的函数有好几个,比如exec和passthru,并且passthru函数能执行命令并且可以返回外部命令的输出,所以本次就使用passthru来实现,php调用c/c++函数的目的就是处理复杂计算时提高计算效率,从而提高整体的系统性能,下面是一个简单的测试案例

  首先编写一个test.c源文件,处理很简单就是对两个整数进行加法运算,代码如下:

复制代码
#includeint 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代码:

复制代码
<>phpheader('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直接执行命令行中的命令来完成调用

  测试结果:

  

  

 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多