【问题标题】:Problem in running an application from a PHP script in a Linux enviroment在 Linux 环境中从 PHP 脚本运行应用程序时出现问题
【发布时间】:2011-06-27 13:26:57
【问题描述】:

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

#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"); ?>

我有什么遗漏吗?请帮忙。

【问题讨论】:

  • 您是否收到任何错误消息?
  • 指定notify-send的完整路径是否有效?
  • 另外,需要明确的是,PHP 脚本是通过命令行本身运行,还是由 Web 服务器提供服务?
  • 尝试使用 $output=array(); 读取命令的输出执行(“命令”,$输出); var_dump($输出);查看是否收到任何错误消息。
  • void mainreturn 0!!!!!!!11!!1one! ... 对我来说是第一个 :)

标签: php c linux notifications exec


【解决方案1】:

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

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

【讨论】:

  • 我刚刚试了一下,结果和之前一样,浏览器一直处于“等待本地主机...”状态
【解决方案2】:

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

您可以从这里http://www.swig.org/compat.html#SupportedLanguages 支持的语言中看到,PHP 是受支持的。我想这就是你要找的。​​p>

【讨论】:

    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

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

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

      【讨论】:

        猜你喜欢
        • 2011-01-26
        • 1970-01-01
        • 2023-03-17
        • 1970-01-01
        • 2013-02-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多