当我跑
<?php
echo exec('whoami');
?>
它工作正常,即使对于其他单字命令
但因为exec('gcc -o a hello.c');
它不会创建目标文件 a。
或者当我尝试exec('./a');
使用预先创建的目标文件时,它不会做任何改变。没有错误没有通知!
任何帮助都是可观的!
基本参考:
使用这些元素,很容易获得错误消息:
<?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);
例如,我在我的(Windows)计算机中得到这个:
Error: status code 1
Output:
"gcc" no se reconoce como un comando interno o externo,
programa o archivo por lotes ejecutable.
最可能的解释是您的 Web 服务器的用户帐户没有对该目录的写入权限。您可以通过在 php.ini 中运行来确定帐户名称whoami
。
exec('whoami', $output);
echo $output[0];
我不知道你会从中得到什么输出,但假设www-data
这就是我在 Ubuntu 上看到的。
现在,如果您查看 web 根目录的权限,您可能会发现它由另一个帐户拥有,可能是root,并且权限是rwxr.xr.x
只有root才能访问。
授予www-data写入访问权限的一种方法是使其成为所有者:
chown www-data .
或者,您可以将组设置为www-data并确保该组具有写入权限。
chgrp www-data .
chmod 775 .
最坏的情况是你可以给每个人写权限,但我不建议这样做,除非没有其他方法。
chmod 777 .
理想情况下,您应该真正创建一个具有写入权限的单独目录,并将任何输出限制在该目录中,而不是更改 Web 根目录的权限。但是您可以先从根开始,并确保这确实是问题所在,然后再付出太多努力。
您可以尝试shell_exec()
在 PHP 中使用:
shell_exec('gcc -o a hello.c');
应该管用