<?php
echo exec('whoami');
?>
它工作正常,即使是其他单个词命令
但exec('gcc -o a hello.c');
它不创建对象文件。
或者当我尝试使用预先创建的目标文件exec('./a');
时,它不作任何更改。没有错误没有通知!
任何帮助是可观的!
<?php
echo exec('whoami');
?>
它工作正常,即使是其他单个词命令
但exec('gcc -o a hello.c');
它不创建对象文件。
或者当我尝试使用预先创建的目标文件exec('./a');
时,它不作任何更改。没有错误没有通知!
任何帮助是可观的!
你可以尝试在PHP中使用shell_exec()
:
shell_exec('gcc -o a hello.c');
应该工作
基本参考:
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.
什么是$ output和$ return_value的值? – Catty
请原谅?你是在问我猜猜你的电脑里输出的是什么? –
最有可能的解释是,您的网站的用户账号服务器不具有对该目录的写入权限。您可以通过在php中运行whoami
来确定帐户名称。
exec('whoami', $output);
echo $output[0];
我不知道你会从得到什么输出,但让我们说这是www-data
这是我所看到的在Ubuntu。现在
,如果你看一下Web根目录的权限,你可能会发现,它是由另一个帐户拥有,也许根和权限rwxr.xr.x
所以只有根访问。
人给www数据写访问的方法是让它的主人:
chown www-data .
另外,您可以将组设置为www数据并确保该组有写权限。
chgrp www-data .
chmod 775 .
最糟糕的情况下,你可以给每个人写入权限,但我不会推荐这个,除非没有别的作品。
chmod 777 .
理想情况下,你应该创建一个写访问一个单独的目录,并限制任何输出到那里,而不是改变在网站根目录的权限。但是你可以先从根开始,并确保这是真正的问题,然后再付出太多的努力。
尝试指定“hello.c”和“a”的完整路径。 –
还取决于你是否有权使用你的用户的gcc它是你的服务器还是虚拟主机? – Prix
@AleksG:我试着用exec('gcc -o/opt/lampp/htdocs/a /opt/lampp/htdocs/hello.c');但没有chage! – Catty