我有问题。我已经制作了一个脚本,使用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= ...
答案 0 :(得分:0)
好吧,你的xvfb-run
脚本将启动Xvfb,一个X Virtual FrameBuffer,它本质上是一个没有附加显示的X11服务器。 X11协议有许多扩展,并非所有X服务器都支持。在这种情况下,您的html2image
脚本要求给定的扩展名(RANDR或“R和R”扩展名,如Pekka指出的那样)并且找不到它。
如果以用户身份登录时有效,而不是从PHP运行时,则可能是因为您的PHP脚本正在使用不同的环境执行。我不知道可能影响Xvfb的所有环境变量,但似乎你可能想尝试显式启用RANDR扩展,可能有类似的东西:
xvfb-run -s "+extension RANDR" ./html2image $1 $2
答案 1 :(得分:0)
只需设置启动脚本中的HOME var就是解决方案。