【发布时间】:2016-03-10 15:52:06
【问题描述】:
我的问题
我在带有 PHP 和 apache 的 linux Ubuntu 14.04 LTS 上使用 cairosvg。我正在使用 php 函数 system() 运行它。这是我正在运行的命令。
cairosvg -f pdf -o /var/www/dev/output.pdf /var/www/dev/input.svg
当我在终端中运行它时,我得到了预期的结果,它按预期生成了 pdf 文件。但是,当我使用system() 在 php 中运行它时,它仍然会生成 pdf 文件,但没有使用正确的字体。
我的尝试
字体已安装。文件夹和字体的文件权限已设置为 777。Apache 已设置为字体文件夹和字体的共同所有者。文件路径是绝对的。 echo on system() 没有错误。我也尝试过使用 system() 的等效替代品。
第一次重大更新:我尝试运行这个 ImageMagick 命令来检查可用字体的差异。 convert -list font 在终端上我看到了我安装的字体,但在 system() 调用中没有。
第二次更新我在终端和system() 中都运行了printenv 命令,发现它们有不同的值。我使用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()system()
【问题讨论】:
-
您可以检查几件事:1) apache 或使用
system()时使用的任何终端用户是否可以访问字体文件夹? 2) 通过 PHP 运行时路径可能不同,因此无法找到正确的字体文件并将其替换为默认字体文件。 3)如果你echosystem()命令像任何错误一样有任何输出吗? -
@JamieBicknell 试过这些,没有运气,更新了问题。
-
不确定我是否理解您的问题。您是否在问为什么
cairosvg在 Apache 下的 PHP 中通过system()运行时看不到您的字体,而 ImageMagick(既不是 cairosvg,也不是 PHP,也不是 Apache)可以看到您的字体?为什么你认为这两件事是相关的? -
@MarkSetchell 否。在终端和
system()中运行完全相同的命令,第一个命令cairosvg -f pdf -o /var/www/dev/output.pdf /var/www/dev/input.svg。第二个命令convert -list font仅用于检查终端和system()之间可用字体的差异。我将更新问题以澄清。 -
今天感觉有点昏暗,还是没明白!你是说
cairosvg和ImageMagick在终端上都可以正常工作,但是在 PHP+Apache 下运行时都看不到你的字体文件?
标签: php linux terminal ubuntu-14.04 cairo