2013-04-21 151 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);