Linux下C/C++代码调用PHP代码(转)
Linux下C/C++代码可以通过popen系统函数调用PHP代码并通过fgets函数获取PHP代码echo输出的字符串。
- //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;
//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”。
- // /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];
// /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代码(转)的更多相关文章
- 在C代码调用C++代码
由于历史原因,以及不同开发人员的技术偏好,C语言和C++语言都有一些独有的非常有价值的项目,因而两种语言的互操作,充分利用前人造的轮子是一件非常有价值的事情. C++代码调用C代码很简单,只要分别在包 ...
- C代码调用Java代码
C代码调用Java代码应用场景 复用已经存在的java代码 c语言需要给java一些通知 c代码不方便实现的逻辑(界面) 反射 //1.加载类字节码 Class clazz = Demo.class. ...
- deepin linux下eclipse c/c++ 调试开源代码
1.deepin linux 下使用eclipse c/c++ 调试2. 编译选项,-g3 -O0,-g3表示输出调试信息,-O0不优化代码(第一个字母o的大写,第二个是数字0) 3.必备环境: gd ...
- [转]linux 下 使用 c / c++ 调用curl库 做通信开发
example: 1. http://curl.haxx.se/libcurl/c/example.html 2. http://www.libcurl.org/book: 1. http:/ ...
- Linux下c++通过动态链接库调用类
http://hi.baidu.com/ablenavy/item/b498901c6826bbf587ad4e33 Linux下的动态链接库叫so,即Shared Object,共享对象.一些函数就 ...
- LINUX下C语言编程调用函数、链接头文件以及库文件
LINUX下C语言编程经常需要链接其他函数,而其他函数一般都放在另外.c文件中,或者打包放在一个库文件里面,我需要在main函数中调用这些函数,主要有如下几种方法: 1.当需要调用函数的个数比较少时, ...
- linux下32位汇编调用规则
传递给系统调用的参数必须安装参数顺序一次放到寄存器中,当系统调用完成后,返回值放在eax中: 当系统调用参数<=5个时: eax中存放系统调用的功能号,传递给系统调用的参数顺序依次放到寄存器:e ...
- Linux下用gdb 调试、查看代码堆栈
Linux中用gdb 查看代码堆栈的信息 core dump 一般是在segmentation fault(段错误)的情况下产生的文件,需要通过ulimit来设置才会得到的. 调试的话输入: gd ...
- 如何在linux下使用git管理上传代码&误删文件修复
首先需要安装git,sudo apt-get install git,这时就可以下载代码了. 然后先在gituhub上新建一个仓库,然后先在本地建一个git目录,git init 然后再配置用户名和邮 ...
随机推荐
- HDOJ1003
#include<iostream> using namespace std; int main() { ],t=,m; cin >> n; while(n--) { cin ...
- 【转】移除HTML5 input在type="number"时的上下小箭头
在chrome下: input::-webkit-outer-spin-button, input::-webkit-inner-spin-button{ -webkit-appearance ...
- ES bulk源码分析——ES 5.0
对bulk request的处理流程: 1.遍历所有的request,对其做一些加工,主要包括:获取routing(如果mapping里有的话).指定的timestamp(如果没有带timestamp ...
- Windows环境搭建ElasticSearch 5.*并配置head
前言: ES5*以上版本需要jdk1.8,jdk1.8,jdk1.8.重要的事情说三遍 1.下载ElasticSearch https://www.elastic.co/cn/downloads/el ...
- PHP:第四章——PHP数组array_diff计算数组差集
<pre> <?php header("Content-Type:text/html;charset=utf-8"); /*知识点一:array_diff — 计 ...
- 获取URL的数据
<!doctype html><html><head><meta charset="utf-8"><meta name=&qu ...
- ehlib 如何用代码,选中checkbox呢?
TDBGridEh = class(TCustomDBGridEh) public property Col; property Row; property Canvas; // property G ...
- 关于 lerp();
value lerp(value s, value a, value b ); 该函数返回的值为:a + s * (b - a) ,是一个处于 [a, b] 之间的值. 当s=0, 该函数返回a :当 ...
- 关于c++显示调用析构函数的陷阱
版权声明:欢迎转载,注明出处就好!如果不喜欢请留言说明原因再踩哦,谢谢,我也可以知道原因,不断进步!! 目录(?)[+] 一.文章来由 现在在写一个项目,需要用到多叉树存储结构,但是在某个时候 ...
- GetTickCount()函数
GetTickCount(),这个函数,在此做下整理和总结.1.定义For Release configurations, this function returns the number of mi ...