我在Windows机器上使用PHP。我也使用Dev c++。我可以完美地编译。cpp文件在CMD使用以下命令:
g++ hello.cpp -O3 -o hello.exe
现在我要做的是使用php system()函数运行相同的命令,所以它看起来像这样:
系统("g + + c: ' wamp ' www '平地机' hello.cpp o3 - o c: ' wamp ' www '平地机' hello . exe");
但是它不能编译。我迷路了,请告诉我我错过了什么?
我也查了这个问题,这正是我需要的,但我找不到一个有用的解决方案,为我的情况:
Php脚本,编译c++文件并运行可执行文件,输入文件
使用PHP执行命令
echo exec('g++ hello.cpp -O3 -o hello.exe');
。
一整个家族都是不同的执行官&PHP中的系统命令,见这里:
http://www.php.net/manual/en/ref.exec.php
如果您希望输出到一个变量中,那么使用:
$variable = exec('g++ hello.cpp -O3 -o hello.exe');
如果这不起作用,那么确保g++在你的路径中可用,并且你登录时有足够的权限允许它执行。
你可能还会发现它失败是因为PHP实际上是由你的web服务器执行的(除非你也从cmd提示符运行PHP),并且web服务器用户ID可能没有对g++试图创建输出文件的文件夹的写访问权限。
临时授予' everyone '在输出文件夹上的写访问权限将验证是否存在这种情况。
两件事:
- 你使用双引号,没有转义路径中的'。
- 你没有使用g++的完整路径
第一个很重要,因为'后面跟一些东西在这样的字符串中有特殊的含义(您可能知道'n是新行),第二个是相关的,因为PHP环境可能有不同的搜索路径。
解决方案可能是
system("c:''path''to''g++ c:''wamp''www''grader''hello.cpp -O3 -o C:''wamp''www''grader''hello.exe");
或者你可以使用单引号来代替双引号,它们使用不同的,不那么严格的转义规则
system('c:'path'to'g++ c:'wamp'www'grader'hello.cpp -O3 -o C:'wamp'www'grader'hello.exe');
或者使用/代替',windows也支持。
system("c:/path/to/g++ c:/wamp/www/grader/hello.cpp -O3 -o C:/wamp/www/grader/hello.exe");
你做什么是你的选择,而许多人可能认为第一个是丑陋的,最后一个是糟糕的风格在Windows;-)
感谢大家。我试着运行上面帖子中给出的代码,它像一个魅力。
我使用浏览器 运行了以下代码$var = exec("g++ C:/wamp/www/cpp/hello.cpp -O3 -o C:/wamp/www/cpp/hello.exe");
echo $var;
exe文件创建完成。当我运行exe文件时,我能够看到结果,但问题是当我在浏览器中运行上述代码时,结果未显示在网页上。我给了所有用户完全访问权限,但仍然没有在网页上显示结果。
我真的需要帮助,因为我正在做一个模拟退火项目,我想从编译的c++程序中获得结果,并在网页上显示一些jquery highcharts。
再次感谢大家,他们帮了我很多,我也学到了很多。