我的问题
我在Linux Ubuntu 14.04 LTS上使用cairosvg与PHP和apache。我正在使用php函数system()
运行它。这是我正在运行的命令。
cairosvg -f pdf -o /var/www/dev/output.pdf /var/www/dev/input.svg
当我在终端中运行它时,我得到了预期的结果,它按预期生成了pdf文件。但是当我使用system()
在php中运行它时,它仍会生成pdf文件,但不使用正确的字体。
我尝试了什么
已安装字体。文件夹和字体的文件权限已设置为777.Apache已设置为字体文件夹和字体的共同所有者。文件路径是绝对的。 echo
上的system()
没有错误。我也试过使用system()
的等效替代品。
第一次重大更新:我已尝试运行此ImageMagick命令来检查可用字体的差异。 convert -list font
在终端上,我看到了我安装的字体,但没有看到system()
电话。
第二次更新我在终端和printenv
中都运行了system()
命令,看到它们有不同的值。我使用proc_open()
设置HOME和USER环境变量,但得到相同的结果。代码如下。
$command = "cairosvg -f pdf -o /var/www/dev/output.pdf /var/www/dev/input.svg";
$descriptorspec = array();
$pipes = array();
$env = array(
'HOME' => '/home/ntwdev',
'USER' => 'ntwdev',
);
$resource = proc_open(
$command,
$descriptorspec,
$pipes,
$cwd = null,
$env
);
当我在终端中运行命令而不是system()
答案 0 :(得分:0)
您可以尝试执行某些命令以在创建PDF命令之前重新构建字体缓存吗?
我能想到:
$ xset fb rehash
从手册页:
rehash参数将字体路径重置为其当前值,导致服务器重新读取 当前字体路径中的字体数据库。这通常仅在向a添加新字体时使用 字体目录(在运行mkfontdir以重新创建字体数据库之后)。
如果你在特殊目录中有字体,你可以:
$ xset +fp /usr/share/fonts/misc
答案 1 :(得分:0)
问题是cairosvg和/或www-data
的apache用户只能访问/usr/share/fonts
文件夹中的字体,无论文件或用户权限如何。