0

我有一个以下 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
4

3 回答 3

1

您正在使用的库正在尝试建立与您的 xserver 的连接以呈现 png。这在终端上工作正常,因为您有一个可用的连接,但会因为 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/。它在制作网页截图方面更好更强大,并且不需要 xserver(但 node.js)

于 2013-03-10T20:58:12.347 回答