为什么php的shell_exec不提供某个a.out文件的输出 我正在使用一个PHP脚本,可以编译和运行C++代码。正在编译最多类型的C++代码,并通过SHILLYEXECUR命令进行输出。但是,一些结构、类的C++代码正在编译,但无法在Apache服务器中通过SHILLYEXEC获取.OUT文件的输出。因此,它的输出在php中显示为null。值得注意的是,在ubuntu终端中,它可以工作,但当我从php运行它时,它无法运行。我在ubuntu,apache服务器上运行它。这是我的PHP代码,可以运行C++代码< /p> <?php $CC="g++"; $out="timeout 5s ./a.out"; $code=$_POST["code"]; $input=$_POST["input"]; $filename_code="main.cpp"; $filename_in="input.txt"; $filename_error="error.txt"; $executable="a.out"; $command=$CC." -lm ".$filename_code; $command_error=$command." 2>".$filename_error; $check=0; //if(trim($code)=="") //die("The code area is empty"); $file_code=fopen($filename_code,"w+"); fwrite($file_code,$code); fclose($file_code); $file_in=fopen($filename_in,"w+"); fwrite($file_in,$input); fclose($file_in); exec("chmod -R 777 $filename_in"); exec("chmod -R 777 $filename_code"); exec("chmod 777 $filename_error"); shell_exec($command_error); exec("chmod -R 777 $executable"); $error=file_get_contents($filename_error); $executionStartTime = microtime(true); if(trim($error)=="") { if(trim($input)=="") { $output=shell_exec($out); } else { $out=$out." < ".$filename_in; $output=shell_exec($out); } //echo "<pre>$output</pre>"; echo "<textarea id='div' class=\"form-control\" name=\"output\" rows=\"10\" cols=\"50\">$output</textarea><br><br>"; } else if(!strpos($error,"error")) { echo "<pre>$error</pre>"; if(trim($input)=="") { $output=shell_exec($out); } else { $out=$out." < ".$filename_in; $output=shell_exec($out); } echo "<textarea id='div' class=\"form-control\" name=\"output\" rows=\"10\" cols=\"50\">$output</textarea><br><br>"; } else { echo "<pre>$error</pre>"; $check=1; } $executionEndTime = microtime(true); $seconds = $executionEndTime - $executionStartTime; $seconds = sprintf('%0.2f', $seconds); echo "<pre>Compiled And Executed In: $seconds s</pre>"; if($check==1) { echo "<pre>Verdict : CE</pre>"; } else if($check==0 && $seconds>3) { echo "<pre>Verdict : TLE</pre>"; } else if(trim($output)=="") { echo "<pre>Verdict : WA</pre>"; } else if($check==0) { echo "<pre>Verdict : AC</pre>"; } exec("rm $filename_code"); exec("rm *.o"); exec("rm *.txt"); exec("rm $executable"); ?>

为什么php的shell_exec不提供某个a.out文件的输出 我正在使用一个PHP脚本,可以编译和运行C++代码。正在编译最多类型的C++代码,并通过SHILLYEXECUR命令进行输出。但是,一些结构、类的C++代码正在编译,但无法在Apache服务器中通过SHILLYEXEC获取.OUT文件的输出。因此,它的输出在php中显示为null。值得注意的是,在ubuntu终端中,它可以工作,但当我从php运行它时,它无法运行。我在ubuntu,apache服务器上运行它。这是我的PHP代码,可以运行C++代码< /p> <?php $CC="g++"; $out="timeout 5s ./a.out"; $code=$_POST["code"]; $input=$_POST["input"]; $filename_code="main.cpp"; $filename_in="input.txt"; $filename_error="error.txt"; $executable="a.out"; $command=$CC." -lm ".$filename_code; $command_error=$command." 2>".$filename_error; $check=0; //if(trim($code)=="") //die("The code area is empty"); $file_code=fopen($filename_code,"w+"); fwrite($file_code,$code); fclose($file_code); $file_in=fopen($filename_in,"w+"); fwrite($file_in,$input); fclose($file_in); exec("chmod -R 777 $filename_in"); exec("chmod -R 777 $filename_code"); exec("chmod 777 $filename_error"); shell_exec($command_error); exec("chmod -R 777 $executable"); $error=file_get_contents($filename_error); $executionStartTime = microtime(true); if(trim($error)=="") { if(trim($input)=="") { $output=shell_exec($out); } else { $out=$out." < ".$filename_in; $output=shell_exec($out); } //echo "<pre>$output</pre>"; echo "<textarea id='div' class=\"form-control\" name=\"output\" rows=\"10\" cols=\"50\">$output</textarea><br><br>"; } else if(!strpos($error,"error")) { echo "<pre>$error</pre>"; if(trim($input)=="") { $output=shell_exec($out); } else { $out=$out." < ".$filename_in; $output=shell_exec($out); } echo "<textarea id='div' class=\"form-control\" name=\"output\" rows=\"10\" cols=\"50\">$output</textarea><br><br>"; } else { echo "<pre>$error</pre>"; $check=1; } $executionEndTime = microtime(true); $seconds = $executionEndTime - $executionStartTime; $seconds = sprintf('%0.2f', $seconds); echo "<pre>Compiled And Executed In: $seconds s</pre>"; if($check==1) { echo "<pre>Verdict : CE</pre>"; } else if($check==0 && $seconds>3) { echo "<pre>Verdict : TLE</pre>"; } else if(trim($output)=="") { echo "<pre>Verdict : WA</pre>"; } else if($check==0) { echo "<pre>Verdict : AC</pre>"; } exec("rm $filename_code"); exec("rm *.o"); exec("rm *.txt"); exec("rm $executable"); ?>,php,c++,shell-exec,Php,C++,Shell Exec,通过终端运行时,您正在使用您的用户权限执行PHP脚本。但是,在使用apache运行脚本时,您正在www data user下运行脚本。 某些可执行文件无法在www数据用户下运行。您可以尝试的解决方案是将www数据添加到您的用户组中 您可以在上找到一条有趣的信息,当您在终端上运行时,您正在使用您的用户权限执行PHP脚本。但是,在使用apache运行脚本时,您正在www data user下运行脚本。 某些可执行文件无法在www数据用户下运行。您可以尝试的解决方案是将www数据添加到您的用户组中 你

通过终端运行时,您正在使用您的用户权限执行PHP脚本。但是,在使用apache运行脚本时,您正在www data user下运行脚本。 某些可执行文件无法在www数据用户下运行。您可以尝试的解决方案是将www数据添加到您的用户组中


您可以在

上找到一条有趣的信息,当您在终端上运行时,您正在使用您的用户权限执行PHP脚本。但是,在使用apache运行脚本时,您正在www data user下运行脚本。 某些可执行文件无法在www数据用户下运行。您可以尝试的解决方案是将www数据添加到您的用户组中


你可以在

上找到一本有趣的书,我终于找到了我的解决办法。我刚刚将我的g++版本更改为4.9,然后shell_exec()开始工作

安装g++4.9

Set g++4.9


以前无法显示输出的C++结构和类代码现在正在显示输出。我不知道为什么g++5版本在终端上工作,但在shell_exec()上不工作,但g++4.9在终端和shell_exec()上都工作。

最后我找到了解决方案。我刚刚将我的g++版本更改为4.9,然后shell_exec()开始工作

安装g++4.9

Set g++4.9


以前无法显示输出的C++结构和类代码现在正在显示输出。我不知道为什么在终端中,g++5版本可以工作,但在shell_exec()中不能工作,但是g++4.9在终端和shell_exec()中都可以工作。

我尝试了所有的功能,但都不能工作。所以我需要一步一步的清晰教程,我尝试了所有的,但它仍然不起作用。所以我需要一步一步清晰的教程
sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt-get update
sudo apt-get install g++-4.9
sudo ln -f -s /usr/bin/g++-4.9 /usr/bin/g++