接收来自 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)
内,您可以通过 argc
和 argv
.
访问此数据
为了一次传递多个变量,你应该使用某种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_serialize
和my_deserialize
的实现细节。
我有一个程序需要发送以下变量:
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
:
exec("./your_program.exe $parameters", $output);
这会将 $parameters
的内容作为命令行参数传递给您的 C++ 程序。在 main(int argc, char** argv)
内,您可以通过 argc
和 argv
.
为了一次传递多个变量,你应该使用某种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_serialize
和my_deserialize
的实现细节。