从浏览器运行时执行失败

时间:2018-10-20 07:52:23

标签: php gcc exec shell-exec

我正在使用php构建C和C ++的在线编译器,因此我们使用gcc compiler来执行“ shell_exec”函数,

  

test.php

<?php $output = shell_exec("gcc /var/www/test/main.c 2>&1"); print_R($output); ?>

如果我在php test.php之类的终端中执行,则工作正常,并且正在创建a.out编译文件。

但是,如果我尝试在localhost/test.php之类的浏览器中运行,则会出现以下错误提示

  

gcc:尝试执行“ cc1”时出错:execvp:没有此类文件或目录

我已授予test.php的完全许可(0777),

  

$ whereis cc1 // cc1:

请找到我正在使用的以下版本

  

gcc版本5.4.0

     

PHP 7.0.32

     

操作系统:ubuntu 16.04

     

服务器:Nginx

是否有使用PHP运行C和C ++的替代方法,或者如何解决从浏览器运行此问题的问题。

1 个答案:

答案 0 :(得分:0)

在读取错误消息时,问题来自两个问题:

  • php找不到gcc,因为$path变量未正确设置,因此在php文件中,您应输入类似PATH=/usr/bin && gcc /var/www/test/main.c的名称。在此示例中,gcc和其他内容在/usr/bin目录中。例如,要知道cc1的位置,请键入find / -name cc1并将其添加到$PATHPATH=/some/path:/some/other/path
  • php的当前目录不可写,因此请指明必须在何处创建生成的文件:gcc /var/www/test/main.c -o /var/www/test/main
  • 目录/var/www/test必须是运行php程序的用户可写的。

请注意,运行php程序的用户不需要root ...

因此您的php文件应如下所示:

<?php
 $output = shell_exec("PATH=/usr/bin && gcc /var/www/test/main.c -o/var/www/test/main 2>&1");    
 print_R($output);
?>