接收来自 PHP 的可变变量输入到 C++

Receive varying variable inputs from PHP into c++

我有一个程序需要发送以下变量:

Bool int string vector<int> vector<string>

这将来自 PHP 电话,因为我调查了 here and here

正在查看this question about (int argc, char** argv[]), I know that you can pass various arguments to a program that it needs so to run, but these are all in the form of a Character Sequence

所以我的问题是: 如果可能的话,您如何在 PHP 调用中发送多个可变变量到 C++程序?

EDIT(问题继续)...函数调用会是什么样子?

不使用 (int argc, char** argv[]) 而只做:

是不是很简单
int main(bool var1, int var2, std::vector<std::string> var3, std::string var4)
{
...
}

因为这似乎让 (int argc, char** argv[]) 有点多余?

您可以使用 exec:

在 PHP 中执行您的 C++ 程序
exec("./your_program.exe $parameters", $output);

这会将 $parameters 的内容作为命令行参数传递给您的 C++ 程序。在 main(int argc, char** argv) 内,您可以通过 argcargv.

访问此数据

为了一次传递多个变量,你应该使用某种serialization。这会将变量的内容转换为一个字符串,然后您可以将其作为命令行参数再次传递。 您只需确保 C++ 端知道如何再次将此字符串反序列化为正确的变量/数据类型。

有多种可能性,从发明自己的格式(不要这样做)到使用其中一种已建立的格式(这样做)。

格式如 JSON、XML、MessagePack, etc. come to mind. You could even implement something using PHP's own serialize 方法。


为了让事情更清楚,让我们假设您想将此数据从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_serializemy_deserialize的实现细节。