5

今日私が発見した問題は、この未回答の問題に似ています。同じではありませんが、同じ原因がある可能性があります。

inkscapePNGまたはPDFのいずれかとして、を使用してSVGファイルをレンダリングしています。ほとんどの場合、Gearman を使用してこれらをバックグラウンドでレンダリングするつもりですが、今のところ、PHP/Apache プロセス内でいくつかのサムネイルを作成しています。Apache プロセス内で(PHP の を介してexec)inkscape が呼び出された場合、レンダリングに必要なフォントが見つからないようです。したがって、グラフィック要素は正常にレンダリングされますが、テキスト要素は PNG 出力に描画されません。

Apache 内の CLI 環境は、通常の bash コンソールとは異なり、フォントが表示されないのではないかと思います。私はOS X 10.6.8を使用しています。何か案は?

編集: コメントに続いて、php -iApache と Gearman の両方の内部をキャプチャし、最初のものと 2 番目のものを比較しました (したがって、理論的には diff を適用すると機能します)。結果はこちら

convert -list font編集 2: を使用して両方の環境で試しましたが、systemまったく違いはありません。

4

2 に答える 2

3

上記のコメントで判断されたように、これは環境の違いによって引き起こされました-HOME実行されたプロセス内で env var が異なって設定されました。proc_opensimple の代わりに使用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 に答える