php - 在 C++ 和 PHP 程序之间传递大数据

标签 php c++ fifo

我需要在 linux 上开发两个程序:cpp_prog 是一个用 c++ 编写的小程序。它监视消息队列系统。一旦消息在队列系统中可用,程序就会下载消息,然后调用另一个 php 程序,比如 php_prog 来处理消息并读取 php_prog 的输出。当php_prog结束后,cpp_prog会拿回控制权,重新监听消息队列系统。这个过程将永远持续下去。

我的问题是如何将大数据从 c++ 传递到 php 并读取 php 程序的输出。

消息可能会很长,所以用 C++ 系统调用 system("php_prog message_string"); 不是一个好的选择。

我也试过使用 fifo。在 cpp_prog 中

int fifo = open(fifo_name.c_str(), O_WRONLY);
write(fifo, msg_string.c_str(), strlen(msg_string.c_str()));
close(fifo);
system("php_prog fifo_name"); //call php_prog with fifo name

在 php_prog 中:

$fifo = $argv[1];
var_dump($fifo);
$str_content = file_get_contents($fifo);
echo "here is msg\n";
var_dump($str_content);
echo "end\n";

但是 cpp_prog 被阻塞,直到我从其他地方(例如终端)调用“php_prog fifo_name”来读取 fifo。

我愿意接受任何建议(但我真的会避免使用 tmp 文件)。如果能提供一个简单的代码就太好了。

BR

最佳答案

我终于在 C++ 中使用 popen 和在 PHP 中使用 file_get_contents 来解决问题。

在 cpp_prog 中:

FILE* fp = popen(cmd.c_str(), "w");
fwrite(msg_string.c_str(), sizeof (char), msg_string.size(), fp);
fflush(fp);
pclose(fp);

在 php_prog 中:

$msg_content = file_get_contents("php://stdin");
echo "here is msg\n";
var_dump($msg_content);
echo "end\n";

关于php - 在 C++ 和 PHP 程序之间传递大数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32827217/

相关文章:

php - Laravel 5.4 中的单选按钮

php - 记住从数据库填充的用户复选框

C++ 概念循环

c++ - 在执行其他命令时运行计时器 C++

c++ - 显示描述文本 (WINAPI)

php - 使用 Zend Guard 保护代码

php - 选择具有多个值的记录并枚举它们

c - 通过fifo向服务器发送确认消息来区分客户端,客户端不会收到后续消息

c - 双向先进先出

php include 来自 fifo(命名管道)文件的指令