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