PHP';s执行运算符不显示g++;错误
我正在为我的网站制作一个代码编辑器,它应该获取用户的代码,编译并运行它,通过将代码的输出与正确的预先确定的输出进行匹配,给用户一个成功或失败的机会PHP';s执行运算符不显示g++;错误,php,Php,我正在为我的网站制作一个代码编辑器,它应该获取用户的代码,编译并运行它,通过将代码的输出与正确的预先确定的输出进行匹配,给用户一个成功或失败的机会 假设我有一个文件editor.php: 这将在网页上完美地显示我的目录内容: Volume in drive C is OS Volume Serial Number is D239-CB9C Directory of C:\Users\Chander Shekhar\OneDrive\Documents\Projects\PHPProject
假设我有一个文件
editor.php
:
这将在网页上完美地显示我的目录内容:
Volume in drive C is OS Volume Serial Number is D239-CB9C Directory of C:\Users\Chander Shekhar\OneDrive\Documents\Projects\PHPProject\AlgoLand\campaign\code 05/03/2020 07:35 PM
. 05/03/2020 07:35 PM
.. 03/15/2020 09:45 PM 4,068 color-mode.png 05/03/2020 07:06 PM 4,060 editor.css 05/03/2020 04:49 PM 3,709 editor.js 05/03/2020 07:35 PM 19 editor.php 05/03/2020 07:04 PM 2,415 l1q1.php 05/03/2020 07:34 PM 86 sample.cpp 6 File(s) 14,357 bytes 2 Dir(s) 242,218,971,136 bytes free
以更可读的形式(注意sample.cpp):
应输出:
C:/Program Files (x86)/CodeBlocks/MinGW/bin/../lib/gcc/mingw32/5.1.0/../../../libmingw32.a(main.o):main.c:(.text.startup+0xa7): undefined reference to `WinMain@16'
collect2.exe: error: ld returned 1 exit status
在命令行编译时。有什么好处
我还可以运行其他程序。
如果我将
sample.cpp
更改为:
#include <iostream>
int main(){
std::cout << "Hello World!";
return 0;
}
<?php echo `sample.exe` ?>
这将提供适当的输出:
Hello World!
编译器可能在
stderr
上提供输出,而不是stdout
。背景符号为stdout
。您需要对管道使用proc\u open
,正如您在第一个示例中所看到的那样,在询问之后,我终于找到了解决此问题的另一种方法
问题是,如上所述,@Derick
,g++正在输出到stderr
。因此,解决方案是将此输出重定向到stdout
这可以通过在命令末尾追加命令来完成,如下所示:
<?php echo `g++ -std=c++14 sample.cpp -o sample.exe 2>&1` ?>
此命令告诉shell:
1) 取g++
和2) 重定向它(>)
3) 到
stdout
(&1)的文件描述符
因此,输出在适当的通道上传输,并由执行操作符接收
Hello World!
<?php echo `g++ -std=c++14 sample.cpp -o sample.exe 2>&1` ?>