Получать различные переменные входные данные из PHP в 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[])
немного избыточным?
1 answers
Вы можете выполнить свою программу на C++ на PHP с помощью exec
:
exec("./your_program.exe $parameters", $output);
Это передаст содержимое $parameters
в качестве аргумента командной строки вашей программе на C++. В пределах main(int argc, char** argv)
вы можете получить доступ к этим данным через argc
и argv
.
Чтобы передать несколько переменных одновременно, вы должны использовать какую-то сериализацию . Это преобразует содержимое ваших переменных в одну строку, которую вы затем можете снова передать в качестве аргумента командной строки. У вас просто есть чтобы убедиться, что сторона C++ знает, как снова отменить сериализацию этой строки в правильные переменные/типы данных.
Существует множество возможностей, начиная от изобретения собственного формата (не делайте этого) до использования одного из установленных (сделайте это).
На ум приходят такие форматы, как JSON, XML, Пакет сообщений и т.д. Вы даже могли бы реализовать что-то, используя собственный 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_serialize
и my_deserialize
.