2013-04-21 75 views
1

我想在某些情况下显示通知。我看到你可以用system()函数做到这一点。除了我不能让它工作;)。PHP系统通知发送

error_reporting(E_ALL); 
system("notify-send 'Text here?'"); 
system('notify-send "Text here?"'); 

能有一个人告诉我什么,我做错了什么?或者我的设置错了?我想创建一个通知,发送和PHP

问候

+0

尝试命令:的“where is通知,发送”发现“通知 - 发送”的完整路径,然后在你的代码中使用它,然后再试一次。 – Alix 2013-04-21 15:28:43

+0

更改为系统('/ usr/bin/notify-send“sdfsd”'); 仍然没有运气 – Haagenti 2013-04-21 15:33:35

+1

尝试以root身份从控制台运行您的PHP代码,例如“sudo php /path/to/your/script.php”。如果有效,问题应该是特权。 – Alix 2013-04-21 15:36:51

回答

2

好吧,即使这是有点儿解决,但我想在这里补充一些笔记/信息,
据我知道在Ubuntu的通知问题应该是运行PHP的用户与运行桌面会话的用户不同(gnome/kde/etc),因此PHP可执行文件没有权限在该屏幕上显示通知。
对我来说,我通过让PHP可执行文件在拥有会话的同一用户下运行来解决它(例如,如果我的用户名被称为abc,我已经设置PHP在同一个abc用户下运行,并且我还必须导出通过使用export DISPLAY=:0显示,
所以我整个的exec /系统调用是这样

exec("export DISPLAY=:0; notify-send 'title' '$message' ") 
+0

只需添加显示部分为我工作,好东西! :) – technicalbloke 2013-04-25 03:25:21

+0

我应该尝试一下,可能是唯一需要的 – 2013-05-13 20:57:11

0

我把出口的展示方式为在/ usr/bin中的脚本。我通过SSH远程测试它进入系统,并已使用它成功地在bash脚本/ crons中http://pastebin.com/h11p2HtN 我很好奇的是如何在登录屏幕上显示桌面通知,这将是很好的显示a关于init脚本的一些信息。

0

我试图得到这与PHP的工作,但我看到的每一个解决方案都是蹩脚的,无论是作为您的用户运行Apache或导出显示等。

我在node.js中写了这个小脚本,其正在由桌面用户运行的优势,不需要额外的环境变量需要导出:

  1. 安装node.js的(应该是很容易的下载,配置,制作,制作安装)
  2. 为这个应用创建一个目录, G。 mkdir〜/ message
  3. Install express-framework:cd〜/ message;故宫安装快车
  4. 创建脚本
  5. 运行它......“节点./script-name.js”

现在你可以火象本地主机请求:5555 /消息= +你好世界

为了我,在浪费了几个小时后,试图用apache,php,cgi或其他方法来实现这个功能。

脚本:

var express = require('express'); 
var app = express(); 
var sys = require('sys'); 
var exec = require('child_process').exec; 
var child; 

app.get('*', function (req, res) { 
    res.contentType('text/html'); 
    res.send(200, ''); 
    child = exec("/usr/bin/notify-send 'Message' '" + req.query.message + "'", function (error, stdout, stderr) {}); 
}); 

app.listen(5555);