相信大家在开发服务器的时候都会遇到需要在PHP中调用C/C++的情况,而想要调用C++必然涉及到传递参数,接下来将会为大家介绍传递PHP在不同的操作系统中向C/C++语言传参的方法。
构建基础的POST/GET方法的表单
HTML代码
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>来词作曲</title> </head> <body> <form action="index.php" target="_blank" method="post"> <input type="text" name="geci1"><br> <input type="text" name="geci2"><br> <input type="text" name="geci3"><br> <input type="text" name="geci4"><br> <input type="text" name="geci5"><br> <input type="text" name="geci6"><br> <input type="text" name="geci7"><br> <input type="text" name="geci8"><br> <input type="submit" value="提交"> </form> </body> </html>
PHP代码
<?php $geci1 = $_POST["geci1"]; $geci2 = $_POST["geci2"]; $geci3 = $_POST["geci3"]; $geci4 = $_POST["geci4"]; $geci5 = $_POST["geci5"]; $geci6 = $_POST["geci6"]; $geci7 = $_POST["geci7"]; $geci8 = $_POST["geci8"]; $pathwin = "start /D C:\Users\asus\ text.exe"; $pathlinux = "./yrsyyds"; $rec = exec("$pathwin $geci1 $geci2 $geci3 $geci4 $geci5 $geci6 $geci7 $geci8",$res,$rc); echo "$res"; ?>
效果:
当用户输入之后点击提交便会通过 POST 方法将值传递到相应的PHP文件中
PHP中的打开程序的函数exec()
其实php中能够打开外部程序的函数还有很多,这里我们就不一个一个介绍了,就着重介绍exec()函数
exec( command , string , return )
这里分别解释三个参数类型(不严谨的标记了一下,方便大家理解)
- command:这个参数是输入一段命令,exec函数会自动调用文件所在操作系统的控制台去执行这个命令
- string:这里可以设置一个变量用于收录控制台执行完命令后接下来弹出来的语句。
- return:这里定义了一个整形,用于存储程序最后的返回值,比如C语言main()函数最后返回的return 0;接下来介绍
接下来介绍linux和windows的操作系统打开文件的命令
windows操作系统中start命令
start只能在cd目录所在文件夹打开目录里的文件,默认情况下,也可以自行输入path
start命令可以打开一个一个文件
假设我们已经有一个用c写了的exe文件放在默认的user目录里,叫做text.exe
start text.exe () () () () ()......
这里着重强调括号里的东西。
在我们使用start命令打开程序时,可以在命令的最末端输入字符串,每个字符串用空格隔开,这个字符串会传递到程序的*argv[ ]数组里,可以通过他来调用
举个例子
<?php $geci1 = $_POST["geci1"]; $geci2 = $_POST["geci2"]; $geci3 = $_POST["geci3"]; $geci4 = $_POST["geci4"]; $geci5 = $_POST["geci5"]; $geci6 = $_POST["geci6"]; $geci7 = $_POST["geci7"]; $geci8 = $_POST["geci8"]; $pathwin = "start /D C:\Users\asus\ text.exe"; $rec = exec("$pathwin $geci1 $geci2 $geci3 $geci4 $geci5 $geci6 $geci7 $geci8",$res,$rc); echo "$res"; ?>
在这个代码中,我定义了一个字符串,用于储存我希望exec()执行的windows命令,也就是打开text.exe程序
当我放在exec()函数中时,我将用户输入的字符串同时和我定义字符串组合在一起用空格隔开,构成了一个完成的命令
一旦当我点击提交,就会在text.exe文件中printf出$pathwin ,$geci1,$geci2这几个变量
他们分别是储存在字符串*argv[0],*argv[1],*argv[2]中的值
相信到这儿了你已经豁然开朗了吧
那么linux中呢?
linux操作系统中start命令
对于linux系统,不采用.exe这样的后缀来判断文件,而是直接根据内置类型进行判断。
想要在linux系统中使用exec()函数就需要用linux编译.cpp文件,然后用linux独有的命令去打开文件
安装模块
yum install gcc gcc-c++
使用命令
g++ test.cpp -o test
将已经编辑好了的.cpp文件编译为test文件
这时候会在/root目录下生成一个test文件,这个文件没有后缀,但是在linux内核下可以直接运行
./test () () ()
使用如上命令即可打开test程序并且传递括号中的参数
方法和windows中的一样
至此大功告成,你学会了吗