5

我今天发现的一个问题类似于这个未解决的问题;虽然不一样,但可能有相同的原因。

我正在使用inkscapePNG 或 PDF 格式渲染 SVG 文件。在大多数情况下,我打算使用 Gearman 在后台渲染这些,但现在我正在 PHP/Apache 进程中创建一些缩略图。似乎如果exec在 Apache 进程中调用(通过 PHP)inkscape,它找不到它需要呈现的字体。因此,图形元素渲染得很好,但任何文本元素都不会在 PNG 输出中绘制。

我怀疑 Apache 内部的 CLI 环境与我通常的 bash 控制台不同,这意味着无法看到字体。我在 OS X 10.6.8 上。有任何想法吗?

编辑:根据评论,我已经php -i在 Apache 和 Gearman 内部进行了捕获,并将第一个与第二个进行了比较(因此理论上应用差异会使其工作)。结果就在这里

编辑 2:我convert -list font在两种环境中都尝试过使用system- 完全没有区别。

4

2 回答 2

3

正如上面的评论所确定的,这是由环境差异引起的 - HOMEenv var 在执行过程中的设置不同。使用proc_open而不是简单可以exec更精确地控制所述过程并明确设置 env var 解决了该问题。

于 2012-04-07T16:43:55.330 回答
1

作为记录,以下是帮助解决此问题的用法proc_open

$command = "{$exec} --without-gui {$params} {$file} {$redirect}";
$return = -1;
// Comment this out for now
//exec($command, self::$output, $return);

$descriptorspec = array(
    0 => array("pipe", "r"),
    1 => array("pipe", "w"),
    2 => array("file", "/dev/null", "a")
);
$pipes = array();
$env = array(
    // Try additional stuff here, but culprit was:
    'HOME' => '/Users/jon',
);
$resource = proc_open(
    $command,
    $descriptorspec,
    $pipes,
    $cwd = null,
    $env
);
于 2012-04-07T16:41:53.270 回答