您可以使用 PHP 在 PHP 中执行 C++ 程序exec
:
exec("./your_program.exe $parameters", $output);
这将传递内容$parameters
作为 C++ 程序的命令行参数。之内main(int argc, char** argv)
,然后您可以通过以下方式访问此数据argc
and argv
.
为了一次传递多个变量,您应该使用某种序列化 https://en.wikipedia.org/wiki/Serialization。这会将变量的内容转换为一个字符串,然后您可以将其作为命令行参数再次传递。
您只需确保 C++ 端知道如何再次将此字符串反序列化为正确的变量/数据类型。
有多种可能性,从发明自己的格式(不要这样做)到使用已建立的格式之一(这样做)。
JSON、XML 等格式,消息包 http://msgpack.org/等等。你甚至可以使用来实现一些东西PHP自己的serialize https://stackoverflow.com/a/866643/678093 method.
为了让事情更清楚,让我们assume您想要将此数据从 PHP 传递到 C++:
$var1 = false;
$var2 = 123;
$var3 = array("some","string","data");
$var4 = "anotherstring";
让我们进一步假设你有一个 PHP 函数my_serialize()
哪个转换array($var1, $var2, $var3, $var4)
进入虚构的序列化格式false|123|<some,string,data>|anotherstring
:
$serialized_data = my_serialize(array($var1, $var2, $var3, $var4));
// $serialized_data == "false|123|<some,string,data>|anotherstring"
// invoke your program and pass the data
exec("./your_program.exe '$serialized_data'", $output);
在您的程序中,序列化数据现在位于argv[1]
。
你现在需要一个函数my_deserialize()
它解析输入数据并将其转换为相应的数据格式。
int main(int argc, char** argv)
{
std::cout << argv[1] << std::endl;
MyData data = my_deserialize(argv[1]);
std::cout << data.var4 << std::endl; // outputs "another string"
}
使用我上面列出的序列化方法之一,您不必关心其实现细节my_serialize
and my_deserialize
.