2009-07-23 36 views
1

我正在爲內部R & D項目構建網頁屏幕捕獲應用程序。如何使用PHP,shell_exe和scrot捕獲x屏幕

環境:Ubuntu 9.04(默認桌面安裝),Apache,PHP。

到目前爲止,我有一個bash腳本需要一個參數(URL),啓動firefox,抓取屏幕並將其保存爲PNG。我試過從終端運行這個,它工作正常。

這裏的bash腳本:

#!/bin/bash 
firefox $1 # Start firefox and go to the passed in URL 
scrot -d 5 test.png # Take screen grab with 5 second delay 

接下來,我創建了一個簡單的PHP頁面使用了shell_exec來運行該腳本:

<? 
    // Sample URL 
    $url = 'http://www.google.com'; 
    // Run the script 
    shell_exec('sh script.sh ' . $url); 
    // Out put HTML to display image 
    echo '<img src="test.png" />'; 
?> 

然而,當PHP頁面調用屏幕不抓獲。 就讓我們來看看在Apache的錯誤日誌顯示以下信息:

Error: no display specified 
giblib error: Can't open X display. It *is* running, yeah 

我猜這是因爲Apache是​​運行作爲不同的用戶並沒有得到訪問我的X顯示。

所以,任何人都可以闡明我做錯了什麼或我如何捕獲當前的用戶顯示。

謝謝。

回答

2

在Apache下運行PHP啓動firefox似乎是一個壞主意(它確實感覺錯誤)。

我會做的方式:

  • 接收URL一個PHP網頁(其中阿帕奇下運行);像一個形式,例如
    • 該頁面插入URL數據庫中的類似系統,將被用作隊列
    • 這個URL被標記爲「處理」
  • 一PHP(或其他語言)腳本,完全獨立於Apache;例如,通過在crontab推出
    • 這個腳本從在數據庫中的隊列中的URL(至少最近的一個,例如),並將其標記爲「處理」
    • 那麼lauches你的shell腳本,它會啓動Firefox並執行截圖
    • 一個截圖完成後,隊列中的URL被標記爲「完成」,並且截圖的路徑與URL相關聯
    • 這將起作用,因爲它與Apache無關
  • 另一個網頁p年齡顯示隊列,並且每個URL的狀態(「處理」,「處理」,「完成+截圖的路徑」
    • 你甚至可以想象有一個用戶和URL之間的關聯,向每個人顯示每個URL +截圖。

有了這個系統,幾個優點:

  • PHP + APACHE的網頁
  • PHP之外的Apache的 「系統」 部分
  • ,你可以對網頁一個服務器
  • 並且你可以有幾臺機器(linux,windows,mac - 也許使用虛擬機)來製作截圖
    • 讓你從不同的操作系統
    • 尺度的方式更好^^

這不是一個真正的問題的答案得到的截圖,但我認爲這是一個更好的辦法...希望這幫助!

+0

感謝您的全面迴應。 我原來的方法是一個非常快速的創意模型,但你是對的,它確實感覺錯誤*,你提出的系統是一個更好的方法。 – 2009-07-23 10:47:34

0

你不能運行bash和Firefox作爲相同的用戶阿帕奇?

+0

請您詳細說明一下。 我假設Apache運行bash腳本,因爲它是沒有X運行的自己的用戶?在學習如何工作的過程中,我對此有些不屑一顧。 – 2009-07-23 10:10:13

2

這是一個guide做屏幕捕獲使用Firefox和xvfb。這種方法的優點是在主X服務器上不會有Firefox窗口打開和關閉。它也將解決您的權限問題。