编译C++;文件使用PHP
我正在Windows machin上使用PHP。我也使用DEV C++。我可以使用以下命令在CMD上完美编译.cpp文件:编译C++;文件使用PHP,php,c++,cmd,Php,C++,Cmd,我正在Windows machin上使用PHP。我也使用DEV C++。我可以使用以下命令在CMD上完美编译.cpp文件: g++ hello.cpp -O3 -o hello.exe 现在,我尝试使用php system()函数运行相同的命令,如下所示: 系统(“g++c:\wamp\www\grader\hello.cpp-O3-oC:\wamp\www\grader\hello.exe”) 但它没有编译。我迷路了,请告诉我我错过了什么 我也查看了这个问题,这正是我需要的,但我在那里找不到
g++ hello.cpp -O3 -o hello.exe
现在,我尝试使用php system()函数运行相同的命令,如下所示:
系统(“g++c:\wamp\www\grader\hello.cpp-O3-oC:\wamp\www\grader\hello.exe”)
但它没有编译。我迷路了,请告诉我我错过了什么
我也查看了这个问题,这正是我需要的,但我在那里找不到一个有用的解决方案:
有两件事:
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上是糟糕的风格;-)p> 使用PHP exec命令
echo exec('g++ hello.cpp -O3 -o hello.exe');
应该有用
PHP中有一系列不同的exec和system命令,请参见此处:
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”的写访问权限将验证是否存在这种情况。感谢everyone。我试着运行上面帖子中给出的代码,效果很好 我使用浏览器运行了以下代码
$var = exec("g++ C:/wamp/www/cpp/hello.cpp -O3 -o C:/wamp/www/cpp/hello.exe");
echo $var;
将创建exe文件。当我运行exe文件时,我可以看到结果,但问题是当我在浏览器中运行上述代码时,结果不会显示在网页上。我授予了所有用户完全访问权限,但仍然没有在网页上显示结果
我确实需要帮助,因为我正在做一个模拟退火的项目,我想从编译的C++程序中得到结果,并用jQuery高图表在网页上显示。
再次感谢大家,它帮助了我很多,我也学到了很多。你确定Windows服务器上安装了
g++
,并且在路径中可见吗?另外,你确定运行PHP的帐户对c:\wamp\www\grader
目录有修改权限吗?谢谢,我使用了第一种方法,它成功了!因为我为g++编写了路径规则,所以我想我不需要到g++的完整路径。谢谢您的回复,我将尝试解决您的方法。因为我不熟悉windows命令行(我来自linux背景),所以我对windows惯例不太熟悉。我曾经在linux上运行shell_exec(),它运行得很好。PHP手册页面将立即帮助您,因为它将解释所有差异。不过,我非常肯定,您的根问题将与权限相关。让我知道你进展如何。:-)实际上这不是权限问题,问题在于g++.exe的完整路径。因为我的路径中有g++,所以我假设我不需要编写完整的路径。显然我需要:)是的,我在回答之后注意到了上面的更新。:-)路径的工作方式与*nix中的工作方式有点不同,我也被它吸引了很多次。尽管如此,我仍然会对未来的参考权限充满信心,特别是如果您在windows IIS web服务器下运行PHP。