PHP / Apache中的Inkscape不会将字体呈现给PNG
我今天发现的问题与这个未解决的问题类似, 虽然不一样,但可能有同样的原因。
我使用inkscape
渲染SVG文件,如PNG或PDF。 在大多数情况下,我打算使用Gearman在后台渲染这些内容,但现在我正在PHP / Apache进程中创build一些缩略图。 看起来,如果inkscape在Apache进程中被调用(通过PHP的exec
),它不能find它需要渲染的字体。 因此,graphics元素渲染良好,但任何文本元素都不会在PNG输出中绘制。
我怀疑从Apache内部的CLI环境是不同的,我的平时bash控制台的方式,这意味着字体不能被看到。 我在OS X 10.6.8上。 有任何想法吗?
编辑:继续从评论中,我已经捕获了Apache和Gearman中的php -i
,并将第一个和第二个(第二个是diff)进行比较(理论上应用diff会使它工作)。 结果在这里 。
编辑2:我已经尝试在两个环境使用system
convert -list font
– 没有任何差异。
正如在上面的评论中所确定的,这是由于环境的不同所导致的 – 在执行的过程中, HOME
env var的设置是不同的。 使用proc_open
而不是简单的exec
更精确地控制上述过程,并明确设置env var解决了这个问题。
为了logging, proc_open
是帮助解决此问题的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 );