繁体   English   中英

PHP和C ++之间的通信

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM