php - 奇怪的程序调用错误

标签 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= ...

最佳答案

好吧,您的 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/

相关文章:

php - cURL cookiejar 行用#HttpOnly_ 注释掉了吗?

php - 使用下拉列表填充字段

linux - 在哪里可以找到 RedHat 的软件包名称和版本?

c# - 下载多个文件 sharpSSH

c++ - 交叉编译 C/C++ 代码以在 Windows、Linux 和 Mac OS 上运行的方式?

linux - 从键盘 bash 脚本控制变量

php - 防止直接访问 mp3/wav 文件,同时允许 Flash 播放器使用 .htaccess(或 PHP)访问它们

javascript - 如何启用禁用的选择选项?

Linux检查用户输入错误处理

bash - 如何查看哪些用户正在执行命令(Shell 脚本)