1

内部R&Dプロジェクト用のWebページスクリーンキャプチャアプリケーションを構築しています。

環境:Ubuntu 9.04(デフォルトのデスクトップインストール)、Apache、PHP。

これまでのところ、1つのパラメーター(URL)を受け取り、Firefoxを起動し、画面を取得してPNGとして保存するbashスクリプトがあります。これをターミナルから実行してみましたが、正常に動作します。

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

次に、shell_execを使用してスクリプトを実行する簡単なPHPページを作成しました。

<?
  // 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ディスプレイにアクセスできないためだと思います。

だから、誰かが私が間違っていることや、現在のユーザーディスプレイをキャプチャする方法に光を当てることができますか?

ありがとう。

4

3 に答える 3

2

Apacheで実行されているPHPからFirefoxを起動することは、私には悪い考えのように思えます(間違いなく間違っていると感じます)。

私がそれをする方法:

  • URLを受け取るPHPWebページ(Apacheで実行)。たとえば、フォームのようなもの
    • そのページは、キューとして使用されるデータベースのようなシステムにURLを挿入します
    • このURLは「処理する」とマークされています
  • PHP(または別の言語)スクリプト。Apacheから完全に独立しています。たとえば、crontabによって起動されます
    • このスクリプトは、データベース内のキューからURL(たとえば、最新のもの)を選択し、それを「処理中」としてマークします。
    • 次に、シェルスクリプトを起動します。これにより、Firefoxが起動し、スクリーンショットが作成されます。
    • スクリーンショットが完成すると、キュー内のURLが「完了」としてマークされ、スクリーンショットのパスがURLに関連付けられます。
    • Apacheから独立しているため、これは機能します
  • 別のWebページには、キューと各URLのステータス(「処理中」、「処理中」、「完了+スクリーンショットへのパス」)が表示されます。
    • すべてのURL+スクリーンショットをすべての人に表示するのではなく、ユーザーとURLの間に関連付けがあることを想像することもできます。

このシステムには、いくつかの利点があります。

  • Webページのphp+apache
  • 「システム」部分のapache外のphp
  • 1つのサーバーにWebページを置くことができます
  • スクリーンショットを作成するために、複数のマシン(Linux、Windows、Mac-おそらく仮想マシンを使用)を使用できます。
    • さまざまなOSからスクリーンショットを取得できます
    • スケールがはるかに優れています^^

それは実際には質問に対する答えではありませんが、私はそれがより良い方法だと思います...これが役立つことを願っています!

于 2009-07-23T10:38:18.193 に答える
2

これは、 Firefoxとxvfbを使用して画面キャプチャを行うためのガイドです。このアプローチの利点は、メインのXサーバーでFirefoxウィンドウが開いたり閉じたりすることがないことです。また、権限に関する問題も解決します。

于 2009-07-23T11:44:19.230 に答える
0

apacheと同じユーザーとしてbashとfirefoxを実行できませんか?

于 2009-07-23T10:06:21.703 に答える