php调用c++程序例子
来源:互联网 发布:淘宝店铺层级怎么计算 编辑:程序博客网 时间:2024/04/20 11:35
现需要php调用c++程序,参考了网上一篇文章,修改后在本机(fedora7)上测试通过,现整理如下。
一、 编写test.cpp程序
转到你的apache服务器的站点目录下(即放置web文件的目录),我的是 /var/www/html目录,在该 目录下编写程序。
该简单程序的作用是通过命令行接受参数并显示出来,test.cpp代码如下:
#include <iostream>using namespace std;int main(int argc,char *argv[]){cout<<"You passed "<<(argc-1)<<" argument"<<((argc-1)==1?"":"s")<<"."<<endl;cout<<((argc-1)==1?"This ":"These ")<<"argument"<<((argc-1)==1?"":"s");cout<<" "<<((argc-1)==1?"is ":"are")<<":<br/><br/>"<<endl<<endl;for(int i=1;i<argc;i++){cout<<"argument["<<i<<"]is:"<<argv[i]<<"<br/>"<<endl;}return 0;}
程序中加入
的目的是为了使php调用该程序后的页面整齐(后面会看到的)。
编译此程序:
#g++ test.cpp -o test
如果编译不通过请把cout放到一行上,避免一个cout语句被断行,分割在好几行上。然后再编译。
执行该程序,例如,给它传递三个参数:
#./test abc def ghi 执行结果为:You passed 3 arguments.These arguments are:<br/><br/>argument[1]is:abc<br/>argument[2]is:def<br/>argument[3]is:ghi<br/>
解释:
1.main()函数带了两个参数:argc(命令行传入参数的个数)和argv(一个包含了所传参数实际 值的字符型指针数组)。这个两个参数能被C++编译器自动捕获.
2.cout<<”You passed “<<(argc-1)<<” argument”<<((argc-1)==1?”“:”s”)<<”.”<
<html><body><br/><br/><br/><br/><br/><div align="center"><form method="post" action="cpp_test2.php">输入你要传给c++程序的参数,各参数间以空格隔开。<br/><br/><input type="text" name="args"><br/><input type="submit" name="submit"></form></div></body></html>
cpp_test.php内容如下:
<?phpecho '<br/><br/><br/><br/><br/><br/>';echo '<div align=center>';if($_POST['args']!=""){echo 'what you input in the textbox are:';echo $_POST['args'];echo '<br/><br/>then the c++ program will execute as follows:<br/><br/><br/>';/*call c++ aplications,the sapce right after ./test is necessary.It separate the command from its arguments*/$command="./test ".escapeshellcmd($_POST['args']);passthru($command);}else{echo '<br/>You did not enter anything in the textbox.';}echo '</div>';
解释:
函数eacapeshellcmd是用来当做安全检查工具,以过滤调一些如”,”,””和”\”等的特殊字符。 这可以防止一些用户企图输入某些字符来调用系统内部命令。
我这里用了test的当前路径,就是/var/www/html目录下,tet程序文件就位于/var/www/html 目录下。当然也可使用绝对路径(不推荐);
passthru(
如果当你执行cpp_test.php教本程序的时候,如果你没有看到程序的任何输出信息,或许是开了安全模式。如果这样,系统将不会允许PHP脚本来执行系统内部程序。关于如何关闭安全模式,请访问网页http: //php.chinaunix.net/manual/zh/features.safe-mode.php,上面有详细的介绍。其次,在一些Unix系统上, PHP函数passthru不能将内部程序的输出传递给浏览页面,如果发生这种情况,可以用system函数来代替passthru函数。
判断安全模式是否打开可用下面的代码(事先应在当前目录下准备一个文本文件sample.txt):
<?php
readfile('./sample.txt');
?>
如果出现如下错误:
Warring:SAFE MODE restriction in effect.则说明安全模式启动了。可以到修改/etc目录下的php.ini中,查找safe_mode = on 修改为 safe_mode = Off即可。
Unix操作系统非常强大,并且PHP允许开发者通过脚本以独立的线程来执行系统内部程序。本文的所给的例子非常的简单,但是只要再多花一点功夫,你可以写一个能更新Mysql数据库的c++程序,运行其他系统命令的程序或者是操作系统文件/目录结构的程序。但是,不管怎样,你都应该确保你的系统安全,绝对不能让任何其他的脚本程序随意访问系统内部程序
- php调用c++程序例子
- php调用c++程序例子
- PHP调用C函数简单例子
- php调用一个c程序,c程序再调用另一个c程序在后台不间断运行
- C++Qt5调用 php-cgi.exe运行 php程序
- C 调试程序例子
- Linux C程序操作Mysql 调用PHP采集淘宝商品
- Oracle调用java程序例子
- 隐性调用php程序
- C++调用PHP程序
- PHP调用C++程序
- php调用python程序
- php调用c++程序
- mq例子程序-php版
- PHP调用C程序问题(C程序需要在后台驻留)涉及LINUX权限问题
- C#调用C++DLL例子
- Linux下C程序调用.so(动态链)的一个例子
- Linux下C程序调用.so(动态链)的一个例子
- Kth Smallest Element in a BST
- 并查集详解
- django1.8 view(6): Built-in Views
- 【前端学习笔记】JQuery的基本思想、常用方法
- HDU 2077 汉诺塔IV
- php调用c++程序例子
- Bean的作用域及初始化
- [第2章]多线程:GCD的简单使用(2)——调度组
- MongoDB查询
- sql------【二】
- sp_send_dbmail参数设置
- 递归 —— 生成排列
- 通过Kafka Admin API执行并获取结果到客户端
- Leetcode52 N-Queens II