php 调用 C++

php调用c++程序 网络交互部分使用php,计算部分使用c++. 主要探索php和其它语言的交互问题。 一种是通过http调用,通过发送请求调用c/c++编写的fastcgi来实现,另外一种就是直接执行外部应用程序的方式,不过这种方式容易影响到系统安全。 首先编写用户输入程序 Use c++ add 阅读详情

from:http://blogold.chinaunix.net/u/32475/showart_429574.html 

现需要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;
}

    程序中加入<br/>的目的是为了使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")<<"."<<endl;

           这句话的意思是获得从执行命令行传入的参数的个数。argv这个字符型指针数组是从0开始检索           的,它默认包含一个实际的值(即本程序的路径,如果你打印argv[0],将显示.,即当前目        录),这个值由C++编译器自动地附加上 去,所以argc的默认值是1,每给它传一个参数,该值      加1。条件操作符”?”是用来判断命令行传入地参数是否多于一个。例如,如果命令行过 传入两个      参数,我们地程序将输出如下信息:
  
           You passed 2 arguments.
   二、编写cpp_test.php脚本文件
          在/var/www/html目录
      首先编写cpp_test.html文件,由它向cpp_test.php传递参数。
      其内容如下:

<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内容如下:

<?php
echo '<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($command);
  
  最后,我们使用PHP的函数passthru来执行变量$command所包含的命令并且将原始的执行结果输出到浏   览器上。在我的服务器上,返回结果的HTML页面如下:

      图一  cpp_test.html

     

     图二  cpp_test.php

 

 


  如果当你执行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/c++的相关问题        php调用c/c++有很多方式,最常用的是通过tcp或者http去调用,通过发送请求去调用c/c++编写的cgi/fastcgi来实现,另外php还有一种直接执行外部应用程序的方式,这种方式会影响到系统安全,容易被攻击者利用,所以使用的时候要谨慎处理好用户输入  php执行外部二进制命令的函数有好几个,比如exec和passthru,并且passthru函数能执行命令并且可以返回外部... 阅读详情

相关推荐

PHP扩展调用C++静态库

概述       php通过扩展方式,调用c++源码,这样做的理由有很多,当你搜到这篇文章时,相信你已经有自己的考虑了。 写这篇博客的理由有二: 整理下php扩展调用c++代码的过程。嗯,对,网上有很多类似的文章,不过对于php扩展c++的方式,很多文章在关键的地方并没有说明,或者说,大部分都是扩展调用c代码的。 已经两年有余没写博客了,在这2017刚开始的时候,开个博客,开始新的旅程

iqmae68024的博客 896

php调用c 的三种方式,php调用c-c++的一种方式

php调用c/c++有很多方式,最常用的是通过tcp或者http去调用,通过发送请求去调用c/c++编写的cgi/fastcgi来实现,另外php还有一种直接执行外部应用程序的方式,这种方式会影响到系统安全,容易被攻击者利用,所以使用的时候要谨慎处理好用户输入php执行外部二进制命令的函数有好几个,比如exec和passthru,并且passthru函数能执行命令并且可以返回外部命令的输出,所以本...

weixin_42492543的博客 1162

使用PHP调用C/C++编写的动态链接库的教程

在PHP中,我们可以使用动态链接库来扩展PHP的功能,实现高性能的计算和访问底层系统资源等操作。然后,在PHP脚本中使用FFI::cdef函数定义C函数的签名,并使用$ffi对象调用动态链接库中的函数。以下是一个简单的示例,展示了如何编写一个函数来计算两个整数的和,并将其封装为动态链接库。保存上述PHP代码为一个.php文件,并将动态链接库的路径替换为您自己的路径。一旦我们有了动态链接库,我们就可以在PHP中调用它。在这个示例中,我们定义了一个简单的sum函数,接受两个整数作为参数,并返回它们的和。

AyxbOle的博客 604

php如何调用c++,在C++中如何调用php

今天我们要学习的教程是:如何在C++中调用php。大家都知道C++是一种比较常用的编程语言,而PHP也是一种较为流行的脚本语言,那么我们如何将这两者结合起来呢?也就是说,我们应该使用怎样的方法才可以在C++中调用PHP呢?如果想要知道实现方法的话,那就接着往下看吧。一、介绍PHPPHP,是一个嵌套的缩写名称,也是英文超级文本预处理语言(PHP:Hypertext Preprocessor)的缩写,...

weixin_29043895的博客 1245

C++调用PHP实现VC项目源码解析

在现代软件架构中,多语言协作已成为构建高性能、高扩展性系统的关键策略。C++以其卓越的执行效率和底层硬件控制能力,广泛应用于高性能计算、系统底层开发等领域;而PHP凭借其在Web开发中的快速部署能力和丰富的生态体系,成为服务端脚本处理的首选语言之一。将C++与PHP结合使用,不仅能充分发挥C++的计算优势,还能借助PHP灵活构建Web接口,实现前后端高效协同。本章将从语言特性对比出发,分析C++与PHP各自的优势与局限,探讨两者互操作的必要性与可行性。

weixin_42355400的博客 911

PHP中调用C/C++制作的动态链接库的教程

一般而言,php速度已经比较快,但是,对于一些较高级开发者而言,如果想要追求更快的速度,那毫无疑问可以通过自己写c代码,并编译为动态链接库(常为.so文件),然后php通过创建一个新的扩展(extension),并在扩展里调用该.so文件,同时对外暴露出php函数接口。 在实际使用中,只要调用该函数接口,即可使用底层更快速的c函数服务。 一、动态链接库(shared) 动态链接库的文件名后缀通常是 “.so”。在Windows系统中,其文件名后缀是”.dll”。 程序如果是和动态连接库进行链接(link),程序运行时需要能够找到相应的动态链接库文件。 使用动态链接库存编译的程序在运行时要求用户

PHP-CPP高级技巧:如何在C++中调用PHP函数与操作变量

PHP-CPP是一个强大的C++库,它允许开发者创建PHP扩展,实现C++与PHP之间的无缝交互。本文将分享如何在C++中高效调用PHP函数和操作变量的实用技巧,帮助开发者充分利用PHP-CPP的强大功能。 ## 快速了解PHP-CPP核心功能 PHP-CPP提供了直观的API,让C++开发者能够轻松与PHP生态系统交互。通过包含核心头文件[include/phpcpp.h](https://

gitblog_09258的博客 603

php调用c++的方法

主要介绍了php调用c++的方法,需要的朋友可以参考下

c++ 调用php

int _System(const char * cmd, std::string& strRet) { FILE * fp; char * p = NULL; int res = -1; if ((fp = _popen(cmd, "r")) == NULL) { printf("popen Error!\n"...

weixin_30919235的博客 670

PHP调用C++动态库

主要的功能是实现PHP调用C++的动态库,C++动态库使用的是COM组件来创建的

Qt QWebEngine实战:手把手教你将Vue3/React前端项目嵌入C++桌面程序

本文详细介绍了如何利用Qt的QWebEngine模块将Vue3/React前端项目无缝嵌入C++桌面程序,实现现代前端框架与原生C++的深度整合。通过环境准备、项目架构设计、前端适配、Qt端集成、双向通信建立及性能优化等步骤,开发者可以高效构建兼具Web灵活性和本地系统能力的混合应用。

weixin_28736355的博客 390

php扩展 静态库,PHP扩展调用C++静态库

概述php通过扩展方式,调用c++源码,这样做的理由有很多,当你搜到这篇文章时,相信你已经有自己的考虑了。写这篇博客的理由有二:整理下php扩展调用c++代码的过程。嗯,对,网上有很多类似的文章,不过对于php扩展c++的方式,很多文章在关键的地方并没有说明,或者说,大部分都是扩展调用c代码的。已经两年有余没写博客了,在这2017刚开始的时候,开个博客,开始新的旅程,也是不错的,哈哈。大概目录c+...

weixin_29175469的博客 361

AWS 小白书 [1] 全球架构

小白应该知道的 AWS 知识

boshansolo的博客 704

php调用c++

最近在建个php网站,到时我php学得不好,很多都行都想用c/c++来实现,其实很多都行c++和c确实更好实现。所以一直搞怎么用php调用c程序,最终还是找到解决方法,现在我们就用PHP调用一个C++程序,就显示hello world吧。 首先我们应该先写一个C++程序,代码如下 : //我首先编辑的这个C++的文件名为hello.cpp #include #include int

Watson2016的博客 4220

【详细】芯片设计全流程(包括每个流程需要用到的工具以及需要参与的工作人员)

一颗芯片的诞生经历了设计、制造和测试(分别对应集成电路产业链的设计业、制造业和封测业),而每一步都包含了复杂的步骤和流程。 图0-1 集成电路产业链 现在,我们重点介绍芯片设计的全流程以及每个流程需要用到的设计工具和需要参与的工作人员。 一、IC设计分类 首先对IC设计的分类做个介绍,如图1-1所示。 图1-1 IC设计分类 如图1-1所示,IC设计可以粗分为数字IC设计和射频/模拟IC设计,数字IC设计又可分为ASIC设计和FPGA/CPLD设计,此外还有一部分IC设计.

qq_36045093的博客 8万+

MyEclipse 2017 CI 10安装与激活

本文介绍MyEclipse 2017 CI 7、CI 8、CI 9和CI 10的安装与激活。此方法理论上应该能激活MyEclipse 2017 CI所有系列,即激活方法是通用的,只是激活文件略有不同。本文提供MyEclipse 2017 CI 7、CI 8、CI 9和CI 10的激活文件。说明:博主所提供的压缩包格式均为RAR5,即WinRAR 5.0以上的版本才能正常解压,别的压缩软件博主不太清...

weixin_42539046的博客 9417

c调用php,C++调用PHP

本文是对网络上现成代码的学习与解读!PHP是比较流行的脚本语言,WEB开发使用广泛,如何在C++程序中不依赖任何WEB SERVER调用PHP,并取得执行结果完成交互,这是本文代码所要实现的功能。PHP安装好后,在目录下有一个php-cgi.exe,我们只要执行这个CGI程序,并将数据通过命名管道传递给它,然后把执行结果通过命名管道读取出来即可,过程并不复杂!请看如下代码:命名管道的创建:SECU...

weixin_33542924的博客 485

微信支付接口「系统繁忙 SYSTEM_ERROR」/「文件不存在」报错分析与解决方案 接口开发实现SDK

微信支付的“平台证书模式”只有5年的有效期,过期后微信支付将不再签发新的平台证书,转而要求开发者使用“微信支付公钥”来处理敏感信息加密及回调签名验证。然而,由于以下几点原因,许多开发者在调用 获取平台证书。尽管微信支付在技术迭代上有其必要性,但报错设计过于不友好。诸如“系统繁忙”这样的提示很难直接关联到平台证书失效或公钥切换问题。这样的信息表达,开发者不仅看不懂,还需要花费大量时间分析排查,非常影响效率。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 788

php调用c++程序实现web访问c++程序

最近,搞这个东西搞的好郁闷,但是最终还是找到解决方法,现在我们就用PHP调用一个C++程序,就是如JAVA里最简单的程序 Hello Fuck. 首先我们应该先写一个C++程序,代码如下 : //我首先编辑的这个C++的文件名为hello.cpp #include #include int main(int argc, char* argv[]) {     cout   

zhoubl668的专栏:远帆,梦之帆! 6940

【100%通过率】华为OD机试真题2026双机位C卷 C语言 实现【加密算法】

【100%通过率】华为OD机试真题2026双机位C卷 Python&JS 实现【加密算法】有一种特殊的加密算法,明文为一段数字串,经过密码本查找转换,生成另一段密文数字串。规则如下

MISAYAONE的博客 651

自助结账商品检测(Scanned Item Detection)——基于YOLOv8的RPC数据集实战

RPC数据集是由中国科学院自动化研究所发布的零售商品结账检测公开数据集,广泛用于自助结账和零售场景下的目标检测与识别。YOLOv8是YOLO系列最新版本,由Ultralytics推出,继承了YOLO家族的高效快速和高准确性,适用于实时检测场景。本文系统介绍了基于YOLOv8的RPC数据集自助结账商品检测方案,涵盖数据准备、训练、推理及UI界面设计。未来,可结合多模态感知、RFID融合技术,打造更加智能和稳定的自助结账系统。

YOLO 252

c调用php函数,c++怎么调用PHP的函数

比方说c++怎么调用PHP的time()函数 c++获取当前时间 写死人啊 几十行代码 崩溃。。回复讨论(解决方案)C++不可以调用php的函数,反过来则可以:将c++程序编写成dll,挂到php下面让php调用。C++不可以调用php的函数,反过来则可以:将c++程序编写成dll,挂到php下面让php调用。 php也是用c写得怎么会不可以呢引用 1 楼 potency 的回复:C++不...

weixin_42509236的博客 387

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

php调用c++程序例子

现需要php调用c++程序,参考了网上一篇文章,修改后在本机(fedora7)上测试通过,现整理如下。一、 编写test.cpp程序 转到你的apache服务器的站点目录下(即放置web文件的目录),我的是 /var/www/html目录,在该 目录下编写程序。    该简单程序的作用是通过命令行接受参数并显示出来,test.cpp代码如下:#include <iostream> using n

胜利者的经验并不复杂,那就是寻找人生的关键点,并在关键时刻竭尽全力 3731

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

PHP调用C++程序

下面以具体的例子来进行说明php调用c++程序

piriter的专栏 648

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

PHP调用mfc,C++ 调用 PHP 脚本

http://www.seacha.com/article.php/knowledge/windows/mfc/2014/0307/2269.htmlPHP是比较流行的脚本语言,WEB开发使用广泛,如何在C++程序中不依赖任何WEB SERVER调用PHP,并取得执行结果完成交互,这是本文代码所要实现的功能。PHP安装好后,在目录下有一个php-cgi.exe,我们只要执行这个CGI程序,并将数据...

weixin_29450147的博客 166
上一篇: linux 安装httpd
下一篇: SVD的图形化解释
superlin2008
博客等级 码龄18年 83粉丝 68原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值