接收从PHP到c++的各种变量输入


Receive varying variable inputs from PHP into c++

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

Bool int string vector<int> vector<string>

这将来自PHP调用,因为我已经研究了此处这里

看看这个关于(int argc, char** argv[])的问题,我知道您可以向程序传递运行所需的各种参数,但这些参数都是字符序列的形式。

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

编辑(问题继续)。。。函数调用会是什么样子?

它是不是像不使用(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访问这些数据。

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

有很多可能性,从发明自己的格式(不要这样做)到使用一种既定的格式(这样做)。

脑海中浮现出JSON、XML、MessagePack等格式。您甚至可以使用PHP自己的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的实现细节。