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

时间:2013-07-01 09:02:34

标签: php linux

当我跑步时

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

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

也是如此

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

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

任何帮助都很明显!

3 个答案:

答案 0 :(得分: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.

答案 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开始,确保在你付出太多努力之前确实存在这个问题。