1

apache(2.4.2)でphp(5.4.2)を使用してwkhtmltopdf(0.11.0 rc1)を実行しようとしています。起動しようとするとwkhtmltopdf-i386 --use-xserver http://www.google.com google.pdf 2>&1、PDFが見つかります。ここに私のphpコード

<?php
    $cmd= '/usr/bin/wkhtmltopdf-i386 http://www.google.com google.pdf 2>&1';
    $ret = shell_exec($cmd);
    echo $ret;
?>

apacheおよびコマンドラインとして機能しphp test.phpます。私のターゲットページには多くの画像といくつかの「重い」jsチャートが含まれているためです。wkhtmltopdfコマンドをpdfに変換しようとすると、セグメンテーション違反が発生します。それを機能させる唯一の方法は、xvfbをX11エミュレーターとして使用することです。コードは次のようになります:

<?php
    $cmd= '/usr/bin/xvfb-run  /usr/bin/wkhtmltopdf-i386 --use-xserver http://www.google.com google.pdf 2>&1';
    $ret = shell_exec($cmd);
    echo $ret;
?>

このスクリプトはコマンドラインphp test.phpで機能しますが、apacheでは機能しません。でapacheのプロセスを調べると、2つのプロセス(with )htopがあることがわかります。php test.php

  • xvfb
  • wkhtmltopdf

apacheで起動すると、xvfbプロセスしかありません。wkhtmltopdfプロセスを待機しているため、apacheからのタイムアウトで終了します。

私はそれをapache(2.2.21)とphp(5.3.10)で動作させることができます。

私が見逃しているものはありますか?たぶん、apacheの設定ファイルに何かありますか?

4

3 に答える 3

1

I was having the same problem. I was using the exec function, but the same applies to shell_exec. The function execution was disabled in php.ini.

SOLUTION: Remove the shell_exec string from the disable_functions at php.ini file.

于 2013-01-07T14:31:14.373 に答える
0

2番目のバージョンがApacheから呼び出せない理由はわかりませんが(シェルを使用しているため、同じシェルを使用してはいけませんshell_execか?)、回避策として(Apache PHPから)shell_exec("php test.php");意図した結果を得ることができますか?

おそらく、 pcntl_execなどの他のプロセス実行関数の1つも試してみてください。

于 2012-09-18T18:34:55.047 に答える
0

それは主に所有権と許可のためです、試してみてください

su www-data (for debian)
php test.php

おそらくエラーが表示されます。

于 2012-09-18T18:50:35.923 に答える