Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/28.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
如何在php中使用exec命令编译和运行c程序?_Php_Linux - Fatal编程技术网

如何在php中使用exec命令编译和运行c程序?

如何在php中使用exec命令编译和运行c程序?,php,linux,Php,Linux,当我跑的时候 <?php echo exec('whoami'); ?> 它可以很好地工作,即使对于其他单字命令也是如此 但是对于exec('gcc-oahello.c')它不创建对象文件a 或者当我尝试执行('./a')对于预创建的对象文件,它不会进行任何更改。没有错误,没有通知 任何帮助都是值得感激的 您可以尝试在PHP中使用shell\u exec(): shell_exec('gcc-oahello.c')应该有效基本参考: (适用于大多数其他壳) 使用这些元素,

当我跑的时候

<?php
echo exec('whoami');
?>

它可以很好地工作,即使对于其他单字命令也是如此

但是对于
exec('gcc-oahello.c')它不创建对象文件a

或者当我尝试执行('./a')对于预创建的对象文件,它不会进行任何更改。没有错误,没有通知


任何帮助都是值得感激的

您可以尝试在PHP中使用
shell\u exec()

shell_exec('gcc-oahello.c')应该有效

基本参考:

  • (适用于大多数其他壳)
使用这些元素,可以直接获取错误消息:

<?php

exec('gcc -o a hello.c 2>&1', $output, $return_value);

echo ($return_value == 0 ? 'OK' : 'Error: status code ' . $return_value) . PHP_EOL;
echo 'Output: ' . PHP_EOL . implode(PHP_EOL, $output);

最可能的解释是web服务器的用户帐户没有对目录的写访问权限。您可以通过在php中运行
whoami
来确定帐户名

exec('whoami', $output);
echo $output[0];
我不知道你将从中得到什么样的输出,但假设它是
www-data
,这就是我在Ubuntu上看到的

现在,如果查看web根目录的权限,您可能会发现它由另一个帐户(可能是root)拥有,并且权限是
rwxr.xr.x
,因此只有root有权访问

授予www数据写入访问权的一种方法是使其成为所有者:

chown www-data .
或者,您可以将组设置为www数据,并确保该组具有写访问权限

chgrp www-data .
chmod 775 .
最糟糕的情况是,你可以给每个人写访问权限,但我不建议这样做,除非没有其他办法

chmod 777 .

理想情况下,您应该真正创建一个具有写访问权限的单独目录,并将任何输出限制到该目录,而不是更改web根目录上的权限。但是,您可以先从根目录开始,并确保这确实是问题所在,然后再进行大量工作。

尝试指定
hello.c
a
的完整路径。这还取决于您是否有权从用户处使用gcc是您的服务器还是web主机?@AleksG:我试过使用exec('gcc-o/opt/lampp/htdocs/a/opt/lampp/htdocs/hello.c');但是没有更改!在错误日志文件中获取信息。您可能有权限限制。没有错误?当然:您正在忽略
exec()
的可选参数和返回值,通常会报告错误。您也放弃了stderr。$output和$return\u value的值是多少?对不起?您是想让我猜一下您计算机中的输出是什么吗?
chmod 777 .