Linux下C/C++代码可以通过popen系统函数调用PHP代码并通过fgets函数获取PHP代码echo输出的字符串。

  1. //main.c
  2. char str[1024] = {0};
  3. char * cmd = "php /src/test/c.php 1234";
  4. FILE * stream = NULL;
  5. if ((stream = popen(cmd, "r")) == NULL){//通过popen执行PHP代码
  6. return "";
  7. }
  8. std::string ret = "";
  9. while((fgets(str, 1024, stream)) != NULL){//通过fgets获取PHP中echo输出的字符串
  10. ret += str;
  11. }
  12. pclose(stream);
  13. return ret;
//main.c
char str[1024] = {0};
char * cmd = "php /src/test/c.php 1234";
FILE * stream = NULL;
if ((stream = popen(cmd, "r")) == NULL){//通过popen执行PHP代码
return "";
}
std::string ret = "";
while((fgets(str, 1024, stream)) != NULL){//通过fgets获取PHP中echo输出的字符串
ret += str;
}
pclose(stream);
return ret;

其中,cmd的“1234”是传递给php文件的参数。PHP代码中,可以和普通的C语言中的main函数一样,通过argc和argv这2个参数来获取这个参数“1234”。

  1. // /src/test/c.php
  2. <?php
  3. include_once(dirname(__FILE__).'/m.php');
  4. include_once(dirname(__FILE__).'/m/SpsTable.php');
  5. if ($argc != 2){ //和C/C++的main函数一样,参数有2个,第一个是php文件名,第二个是main.c中cmd字符串中的“1234”
  6. die();
  7. }
  8. array_shift($argv);//移除第一个参数,第一个参数是php文件名
  9. $spsFileId = (int)$argv[0];
// /src/test/c.php
<?php
include_once(dirname(__FILE__).'/m.php');
include_once(dirname(__FILE__).'/m/SpsTable.php'); if ($argc != 2){ //和C/C++的main函数一样,参数有2个,第一个是php文件名,第二个是main.c中cmd字符串中的“1234”
die();
} array_shift($argv);//移除第一个参数,第一个参数是php文件名 $spsFileId = (int)$argv[0];

PHP代码中需要注意的是,如果被调用的PHP文件有include额外的PHP文件,最好通过dirname(__FILE__)或其他方法使用PHP文件的绝对路径,否则很容易出现找不到PHP文件的错误。

http://blog.csdn.net/liuyangwuhan1980/article/details/41745041

Linux下C/C++代码调用PHP代码(转)的更多相关文章

  1. 在C代码调用C++代码

    由于历史原因,以及不同开发人员的技术偏好,C语言和C++语言都有一些独有的非常有价值的项目,因而两种语言的互操作,充分利用前人造的轮子是一件非常有价值的事情. C++代码调用C代码很简单,只要分别在包 ...

  2. C代码调用Java代码

    C代码调用Java代码应用场景 复用已经存在的java代码 c语言需要给java一些通知 c代码不方便实现的逻辑(界面) 反射 //1.加载类字节码 Class clazz = Demo.class. ...

  3. deepin linux下eclipse c/c++ 调试开源代码

    1.deepin linux 下使用eclipse c/c++ 调试2. 编译选项,-g3 -O0,-g3表示输出调试信息,-O0不优化代码(第一个字母o的大写,第二个是数字0) 3.必备环境: gd ...

  4. [转]linux 下 使用 c / c++ 调用curl库 做通信开发

    example:   1. http://curl.haxx.se/libcurl/c/example.html  2. http://www.libcurl.org/book:  1. http:/ ...

  5. Linux下c++通过动态链接库调用类

    http://hi.baidu.com/ablenavy/item/b498901c6826bbf587ad4e33 Linux下的动态链接库叫so,即Shared Object,共享对象.一些函数就 ...

  6. LINUX下C语言编程调用函数、链接头文件以及库文件

    LINUX下C语言编程经常需要链接其他函数,而其他函数一般都放在另外.c文件中,或者打包放在一个库文件里面,我需要在main函数中调用这些函数,主要有如下几种方法: 1.当需要调用函数的个数比较少时, ...

  7. linux下32位汇编调用规则

    传递给系统调用的参数必须安装参数顺序一次放到寄存器中,当系统调用完成后,返回值放在eax中: 当系统调用参数<=5个时: eax中存放系统调用的功能号,传递给系统调用的参数顺序依次放到寄存器:e ...

  8. Linux下用gdb 调试、查看代码堆栈

      Linux中用gdb 查看代码堆栈的信息 core dump 一般是在segmentation fault(段错误)的情况下产生的文件,需要通过ulimit来设置才会得到的. 调试的话输入: gd ...

  9. 如何在linux下使用git管理上传代码&误删文件修复

    首先需要安装git,sudo apt-get install git,这时就可以下载代码了. 然后先在gituhub上新建一个仓库,然后先在本地建一个git目录,git init 然后再配置用户名和邮 ...

随机推荐

  1. spring 监听器 IntrospectorCleanupListener

    org.springframework.web.util.IntrospectorCleanupListener监听器 主要负责处理由JavaBean Introspector使用而引起的缓冲泄露,  ...

  2. 10. Regular Expression Matching *HARD*

    Implement regular expression matching with support for '.' and '*'. '.' Matches any single character ...

  3. 实现自己的ls命令

    一步步实现,先看最简单的ls的指令: ls不带参数,直接打印文件名 dst.txt main10.c main11.c main12.c main13.c main14.c~ main15.c~ ma ...

  4. 从用户输入url到页面最后呈现 发生了些什么?

    一.浏览器获取资源的过程: 1.输入url 2.浏览器解析url,获得主机名 3.将主机名转换成服务器ip地址(查找本地DNS缓存列表,如果没有则向默认的DNS服务器发送查询请求) 4.浏览器建立一条 ...

  5. kernel jenkins build script

    #!/bin/bash #gcc: site="https://releases.linaro.org" #https://releases.linaro.org/componen ...

  6. SQL Server 调优系列基础篇 - 性能调优介绍

    前言 关于SQL Server调优系列是一个庞大的内容体系,非一言两语能够分析清楚,本篇先就在SQL 调优中所最常用的查询计划进行解析,力图做好基础的掌握,夯实基本功!而后再谈谈整体的语句调优. 通过 ...

  7. Flask初级(六)flash模板渲染

    Project name :Flask_Plan templates:templates static:static 继续上篇的模板 我们已经可以静态调用模板,包括继承模板,保证了页面的一致性,但是我 ...

  8. MyEclipse移动开发教程:设置所需配置的iOS应用(二)

    MyEclipse个人授权 折扣低至冰点!立即开抢>> [MyEclipse最新版下载] 二.创建一个数字证书和私钥 2.2 生成证书签名请求和私钥文件 第一步是使用数字签名实用程序创建证 ...

  9. Redis----windows下的常用命令二

    Redis 是一个开源,高级的键值对的存储.它经常作为服务端的数据结构,它的键的数据类型能够是strings, hashs, lists, sets(无序集合) 和 sorted sets(有序集合) ...

  10. Python 字典的嵌套

    wf = { "name":"汪峰", "age":52, "hobby":["唱歌", " ...