IT News > トピックス > Webページサムネイル化 > 保留にしているURL3

仮想フレームバッファXvfb上でfirefoxを実行したいが、 Gtk-WARNING **: cannot open display: となる

.shから
php test.php
とし、以下のスクリプトをroot権限としてcrontab経由で実行しています。

<?php
$CapAddr = '&#8203;http://google.com';&#8203;

system('firefox -display :1 -remote "openurl(' . $CapAddr . '), new-window"');

?>

ところが、ssh接続したターミナル上でimportコマンドで画面のキャプチャを取得して開いてみると
指定したページが表示されていません。吐いているエラーを見ると、
(firefox-bin:6340): Gtk-WARNING **: cannot open display:
となり、実行に失敗しています。
ssh接続した所で直に打ち込めば何ら問題なく言うことを聞いてくれるのですが、
shell script上で
php /home/htdocs/WebPageCapture.php
とするとまたしても同じエラーを吐きます。

次はやり方を変えて、呼び出さずに直接CLI版のPHPを動かす方法を試しました。
#!/usr/bin/php
<?php
で始まる、同一のコードです。
すると再び、同じ
(firefox-bin:7802): Gtk-WARNING **: cannot open display:
のエラーが発生してます。

terminalで同じ事をすると上手く行くだけに困っています。
お力を貸していただけませんでしょうか、よろしくお願いいたします

接続元:Mac OSX Tiger
接続先サーバ環境:CentOS4.2
# ps ax | grep Xvfb
/usr/X11R6/bin/Xvfb :1 -screen 0 1024x2048x24

これで上手くいくかどうかは知りませんが、

>cannot open display:

と言っているようだから、

>system('firefox -display :1 -remote "openurl(' . $CapAddr . '), new-window"');

の前に

putenv("DISPLAY=:1.0");

してみるというのはどうでしょう。


なるほど、さすがです。出来ました。
phpからは環境変数をなぜか取ってきてくれないようですね・・・。

export DISPLAY=:1.0
とした後にapacheと一緒に動き出しているphpを再起動していなかったので
/etc/init.d/httpd restart
とするともしかすると環境変数を読み取ってくれるのかもしれませんが。

ひとまず、うまくいきました。ありがとうございます。