2013-07-01 34 views
3

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

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

它工作正常,即使是其他单个词命令

exec('gcc -o a hello.c');它不创建对象文件。

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

任何帮助是可观的!

+2

尝试指定“hello.c”和“a”的完整路径。 –

+0

还取决于你是否有权使用你的用户的gcc它是你的服务器还是虚拟主机? – Prix

+0

@AleksG:我试着用exec('gcc -o/opt/lampp/htdocs/a /opt/lampp/htdocs/hello.c');但没有chage! – Catty

回答

1

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

shell_exec('gcc -o a hello.c');应该工作

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. 
+0

什么是$ output和$ return_value的值? – Catty

+0

请原谅?你是在问我猜猜你的电脑里输出的是什么? –

1

最有可能的解释是,您的网站的用户账号服务器不具有对该目录的写入权限。您可以通过在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 . 

理想情况下,你应该创建一个写访问一个单独的目录,并限制任何输出到那里,而不是改变在网站根目录的权限。但是你可以先从根开始,并确保这是真正的问题,然后再付出太多的努力。