奇怪的程序调用错误

时间:2009-12-17 17:28:47

标签: php linux scripting

我有问题。我已经制作了一个脚本,使用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= ...

2 个答案:

答案 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就是解决方案。