当我跑步时
<?php
echo exec('whoami');
?>
它工作正常,即使对于其他单字命令
也是如此但对于exec('gcc -o a hello.c');
,它不会创建对象文件a。
或者当我使用预先创建的目标文件尝试exec('./a');
时,它不会进行任何更改。没有错误没有通知!
任何帮助都很明显!
答案 0 :(得分:3)
基本参考:
exec()
manual page 使用这些元素,可以直接获取错误消息:
<?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.
答案 1 :(得分:1)
您可以尝试在PHP中使用shell_exec()
:
shell_exec('gcc -o a hello.c');
应该有效
答案 2 :(得分:1)
最可能的解释是您的Web服务器的用户帐户没有对该目录的写入权限。您可以通过在php中运行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根目录上的权限。但是你可以先从root开始,确保在你付出太多努力之前确实存在这个问题。