0

PHPスクリプトからPDFに入力しようとしています。次のURLでSid Stewardの記事をフォローしています。

CentOS Linux ディストリビューションでPDFTkパッケージを構成しました。コマンド プロンプトから pdftk を実行できます。FDF フォームが PDF とマージされ、平坦化された (塗りつぶされた) PDF が正常に生成されます。次のコマンドを使用して、シェルを使用して Pdftk をテストしています。

pdftk /tmp/form.pdf fill_form /tmp/fdfbm0pe7 output /tmp/filledform.pdf flatten

しかし、PHP で同様のコマンドを実行しようとすると、エラーが発生します。パススルーコマンドがエラー コード11で失敗しています。以下は、コマンドを実行するために使用しているphpコードです。

$command = 'pdftk form.pdf fill_form '. $fdf_fn. ' output - flatten';
passthru($command, $error);

上記の$fdf_fnには FDF ファイル名があります。form.pdfは入力可能な PDF フォームです。上記のコード行を提供したform.pdfと PHP スクリプト ファイルの両方が同じフォルダーにあります。shell_exec('pdftk')をエコーし​​て PHP を介して PDFtk が正しく実行されていることを確認しましたが、標準のヘルプの詳細が返されていました。

詳細を説明すると、pdftk へのパスは/usr/bin/で、PHP スクリプトと PDF フォーム ファイルは/var/www/html/pdfmergeの下にあります。

PHPを介したコマンドの実行がエラーコード11で失敗しているという私が間違っていることを教えてください。

4

2 に答える 2

2

CentOS で PDFTK を実行している PHP でまったく同じ問題が発生し、何時間も探し回ったので、誰かがこれを役に立つと思っています。私の PDFTK の具体的な用途は、Drupal の FillPDF モジュールです。終了コード 11 の問題の解決策は、httpd が PDFTK を実行できるようにローカル ポリシー モジュールを設定することでした。このように pdftk の /var/log/audit/audit.log を grep すると

grep -i pdftk /var/log/audit/audit.log

'execmem' などのエラーがいくつか表示されるはずです。これが私が問題を解決するためにしたことです...

このコマンドを実行すると、エラーがログから取り出され、確認できるようにファイルに入れられます。

grep -i pdftk /var/log/audit/audit.log | audit2allow -m pdftklocal > pdftklocal.te

出力に問題がなければ (IS 出力がある場合など)、このコマンドを実行してモジュールを作成します。

grep -i pdftk /var/log/audit/audit.log | audit2allow -M pdftklocal

モジュールが作成されたら、このコマンドを実行してポリシーをアクティブにします。

/usr/sbin/semodule -i pdftklocal.pp

PDFTK は PHP から実行する必要があります。そうでない場合は、実行して httpd_enable_cgi がオンになっているかどうかを確認します

getsebool httpd_enable_cgi

オンになっていない場合は、実行してオンにします

setsebool -P httpd_enable_cgi 1

ポリシー モジュールの詳細については、http ://wiki.centos.org/HowTos/SELinux#head-faa96b3fdd922004cdb988c1989e56191c257c01 を参照してください。

于 2011-02-17T16:16:40.357 に答える
0

私はあなたが抱えていたものと同様の問題を抱えていましたが、PHPには.pdf、.fdfを読み取るためのアクセス権がなく、/tmpディレクトリにフラット化された.pdfファイルを作成するためのアクセス権がありませんでした。

それが問題かどうかを確認するには、やってみてください

chmod 777 /tmp

それで問題が解決するかどうかを確認します。777のままにすることはお勧めしませんが、700程度に戻すことをお勧めします。

于 2010-09-08T19:13:26.983 に答える