在Linux环境中从PHP脚本运行应用程序时出现问题

时间:2011-06-27 13:26:57

标签: php c linux notifications exec

我最近写了一个应该在Linux环境中运行的C程序,如下所示;

#include <stdio.h>
#include <stdlib.h>

void main()
{
    system("notify-send -u normal -t 200 'You Have received a new message'");
    system("cvlc /home/ashenafis/Music/BabyMessage.mp3");
    return 0;
}

编译并将可执行文件保存在“/ usr / sbin / play”中。

当我从终端运行它时工作正常,但是当我尝试使用

从PHP脚本运行它时,它不起作用
<?php exec("/usr/sbin/play"); ?>

我有什么遗失的吗?请帮忙。

4 个答案:

答案 0 :(得分:0)

你可以尝试使用backtick operator,它执行一个shell,然后调用程序,而不是直接调用程序。代码是这样的:

<?php echo `/usr/sbin/play`; ?>

答案 1 :(得分:0)

我不知道这是一种矫枉过正,但您可以尝试SWIG,它是:一种软件开发工具,它将用C和C ++编写的程序与各种高级编程语言连接起来。

您可以从支持的语言http://www.swig.org/compat.html#SupportedLanguages中看到,PHP支持。我认为这就是你要找的东西。

答案 2 :(得分:0)

notify-send和cvlc可能不在PHP已知的路径中。尝试使C程序通过其完整文件名引用它们。另外,请确保相关内容具有o + x权限。

答案 3 :(得分:0)

请记住,这将尝试以运行Web服务器的任何用户身份运行,出于安​​全原因,这很可能受到限制。例如,在使用Apache的我的机器(Ubuntu)上,它是一个名为www-data的用户。您可以使用'su'命令尝试以此用户身份运行程序,并可能看到问题所在。如果您不知道此用户的密码,请以root身份运行su命令。

su -c /path/your/program www-data

想想看,我非常怀疑网络服务器用户可以访问“系统”二进制文件,即/usr/sbin中的任何内容。在/var/www/cgi-bin或类似的事情中可能会更好。