[英]Communication between PHP and C++
我想传达PHP和C ++代码。
我需要在它们之间传递一个大的JSON。 问题是我目前正在使用“passthru”,但由于某种原因我不知道,C ++代码没有收到整个参数,但是当JSON为3156时,它被剪切为528个字符。
通过执行测试,我已经能够验证“passthru”命令支持与3156一样多的字符。但我不知道C ++中是否存在最大输入参数大小。
PHP应用程序如下:
passthru('programc++.exe '.$bigJSON, $returnVal);
C ++应用程序:
int main(int argc, char* argv[]){
char *json = argv[1];
}
有什么方法可以解决这个问题吗? 我已经阅读了关于PHP扩展和IPC协议的内容,但问题是我必须做一个多平台程序(我必须有一个适用于Windows的版本,另一个适用于Linux和Mac)。 而且我认为使用PHP扩展和IPC协议(据我所知)会使事情变得复杂。
解决方案:解决方案是使用“proc_open”并使用管道标准输入和标准输出。 在我的例子中,我使用库rapidjson。 我在PHP中添加双引号,以便rapidJSON工作并处理JSON。 PHP:
$exe_command = 'program.exe';
$descriptorspec = array(
0 => array("pipe", "r"), // stdin
1 => array("pipe", "w"), // stdout -> we use this
2 => array("pipe", "w") // stderr
);
$process = proc_open($exe_command, $descriptorspec, $pipes);
$returnValue = null;
if (is_resource($process)){
fwrite($pipes[0], $bigJSON);
fclose($pipes[0]);
$returnValue = stream_get_contents($pipes[1]);
fclose($pipes[1]);
}
C ++:
int main(int argc, char* argv[]){
std::string json;
std::getline (std::cin, json);
cout << json << endl; // The JSON
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.