微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

从PHP接收变量输入到c

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

Bool int string vector< int>矢量<串GT; 这将来自PHP调用,因为我已经调查了herehere.

看看this question about(int argc,char ** argv []),我知道你可以将各种参数传递给它需要运行的程序,但这些都是Character Sequence的形式.

所以我的问题是:如果有可能,你如何在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)中,您可以通过argc和argv访问此数据.

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

有许多可能性,从发明自己的格式(不要这样做)到使用已建立的格式(这样做).

我想到了JSON,XML,MessagePack等格式.您甚至可以使用PHP’s own serialize方法实现某些功能.

为了使事情更清楚,我们假设您要将此数据从PHP传递到C:

$var1 = false;
$var2 = 123;
$var3 = array("some","string","data");
$var4 = "anotherstring";

让我们进一步假设你有一个PHP函数my_serialize(),它将数组($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的实现细节.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐