从php脚本运行webkit2png可以在终端中运行,但不能在浏览器中运行

时间:2013-02-27 03:21:12

标签: php macos qtwebkit

我有一个以下的PHP脚本 -

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

通过

从终端运行时
php test.php

它会生成网站截图,但是,在浏览器中打开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

3 个答案:

答案 0 :(得分:1)

您正在使用的库正在尝试建立与xserver的连接以呈现png。这在终端上工作正常,因为你有一个可用的连接,但是会因sS或apache会话而中断。

您可以使用xvfb

创建一个用于其用途

this question中使用的方法是一个很好的例子(您可以忽略解决方案)。

<?php
$command = "xvfb-run -a -s '-screen 0 640x480x16' python webkit2png/webkit2png -D screenshots http://stackoverflow.com";
$command = escapeshellcmd($command);
system($command);

答案 1 :(得分:0)

你应该使用像/usr/local/php53/bin/php

这样的绝对路径

答案 2 :(得分:0)

如果您没有被迫使用python并且可以安装其他内容,我建议http://phantomjs.org/。它在制作网页截图方面更好,更强大,不需要xserver(但是node.js)