3

当我跑

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

它工作正常,即使对于其他单字命令

但因为exec('gcc -o a hello.c');它不会创建目标文件 a。

或者当我尝试exec('./a');使用预先创建的目标文件时,它不会做任何改变。没有错误没有通知!

任何帮助都是可观的!

4

3 回答 3

3

基本参考:

使用这些元素,很容易获得错误消息:

<?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.
于 2013-07-01T09:29:40.157 回答
1

最可能的解释是您的 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 根目录的权限。但是您可以先从根开始,并确保这确实是问题所在,然后再付出太多努力。

于 2013-07-01T12:46:36.617 回答
1

您可以尝试shell_exec()在 PHP 中使用:

shell_exec('gcc -o a hello.c');应该管用

于 2013-07-01T09:08:03.810 回答