我最近写了一个应该在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"); ?>
我有什么遗失的吗?请帮忙。
答案 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
或类似的事情中可能会更好。