Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/136.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
编译C++;文件使用PHP_Php_C++_Cmd - Fatal编程技术网

编译C++;文件使用PHP

编译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”) 但它没有编译。我迷路了,请告诉我我错过了什么 我也查看了这个问题,这正是我需要的,但我在那里找不到

我正在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++的完整路径
  • 第一个是重要的,因为\后跟在这样的字符串中有特殊意义的内容(您可能知道\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上是糟糕的风格;-)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。