我有一个问题。我制作了一个脚本,使用 html2image 将给定的 HTML 页面(url)转换为给定的 jpg 文件。 :
#!/bin/sh
cd /absolute/path/html2imagev3
LD_LIBRARY_PATH=.:/usr/lib:$LD_LIBRARY_PATH xvfb-run ./html2image $1 $2
然后像这样运行:
/path/to/convert 'http://www.google.com' /tmp/google_screen.jpg
这可以正常工作。然而,当我使用 PHP 调用此脚本时,
system('./convert ' . $url . ' ' . $file);
我收到此错误:
Xlib: extension "RANDR" missing on display ":99.0".
current dir: /absolute/path/html2imagev3/libxpcom.so
Failed to get HOME
如何解决这个问题?
编辑: 我已经修好了。谢谢您的帮助。 通过将 HOME var 添加到转换脚本中,程序将运行:
HOME=/tmp LD_LIBRARY_PATH= ...
最佳答案
好吧,您的 xvfb-run
脚本将启动 Xvfb,一个 X 虚拟帧缓冲区,它本质上是一个没有附加显示器的 X11 服务器。 X11 协议(protocol)有许多扩展,并非所有 X 服务器都支持。在这种情况下,您的 html2image
脚本要求提供给定的扩展名(RANDR,或“R 和 R”扩展名,正如 Pekka 指出的那样),但找不到它。
如果以您的用户身份登录时有效,而不是从 PHP 运行时有效,则可能是因为您的 PHP 脚本是在不同的环境中执行的。我不知道可能影响 Xvfb 的所有环境变量,但您似乎可能想尝试显式启用 RANDR 扩展,也许可以使用以下命令:
xvfb-run -s "+extension RANDR" ./html2image $1 $2
关于php - 奇怪的程序调用错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1923311/