我正在使用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 ++的替代方法,或者如何解决从浏览器运行此问题的问题。
答案 0 :(得分:0)
在读取错误消息时,问题来自两个问题:
php
找不到gcc
,因为$path
变量未正确设置,因此在php
文件中,您应输入类似PATH=/usr/bin && gcc /var/www/test/main.c
的名称。在此示例中,gcc
和其他内容在/usr/bin
目录中。例如,要知道cc1
的位置,请键入find / -name cc1
并将其添加到$PATH
:PATH=/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);
?>