0

次のphpスクリプトがあります-

<?php
$command = "python webkit2png/webkit2png -D screenshots http://stackoverflow.com";
$command = escapeshellcmd($command);
system($command);

ターミナルから実行する場合

php test.php

Web サイトのスクリーンショットが生成されますが、ブラウザーで test.php を開いても結果は得られません。

Python スクリプトと php スクリプトの両方が _www ユーザーによって所有されており、その下で apache が実行されています。ターミナルの _www の下で test.php を実行してみましたが、それでも動作します。足りないものはありますか?

@amccauslのおかげで、Apacheログでこれを見つけました-

Wed Feb 27 07:12:03 mini.local python[83331] <Error>: kCGErrorFailure: Set a breakpoint @ CGErrorBreakpoint() to catch errors as they are logged.
_RegisterApplication(), FAILED TO establish the default connection to the WindowServer, _CGSDefaultConnection() is NULL.
Traceback (most recent call last):
  File "webkit2png/webkit2png", line 353, in <module>
    if __name__ == '__main__' : main()
  File "webkit2png/webkit2png", line 324, in main
    AppKit.NSBorderlessWindowMask, 2, 0)
objc.error: NSInternalInconsistencyException - Error (1002) creating CGSWindow
4

3 に答える 3

1

使用しているライブラリは、png をレンダリングするために xserver への接続を確立しようとしています。接続が利用可能であるため、これはターミナルでは正常に機能しますが、ssh または apache セッションはそうでないため中断します。

で使用するものを作成できますxvfb

この質問で使用されているアプローチは、あなたにとって良い例です (解決策は無視してかまいません)。

<?php
$command = "xvfb-run -a -s '-screen 0 640x480x16' python webkit2png/webkit2png -D screenshots http://stackoverflow.com";
$command = escapeshellcmd($command);
system($command);
于 2013-02-27T19:20:25.267 に答える
0

次のような絶対パスを使用する必要があります/usr/local/php53/bin/php

于 2013-02-27T03:28:23.380 に答える
0

Python の使用を強制されておらず、別のものをインストールできる場合は、http://phantomjs.org/をお勧めします。Webページのスクリーンショットを作成するのにはるかに優れて強力であり、xserver(ただしnode.js)は必要ありません

于 2013-03-10T20:58:12.347 に答える