私はPHPを使用して、次のようなスクリプトでexec()を実行しています:
exec("pdftk xx.pdf fill_form xx.fdf output xx.pdf flatten");
最も奇妙なことは、ssh にログインしてコマンドを手動で入力すると、正常に動作することです。224k pdfを出力します。しかし、exec() コマンドを使用すると、スクリプトの最初の 36k しか表示されません。(確認しました - 正常なファイルの最初の 36k は不良ファイルと同じです)
奇妙なことはありません-これは、fdfファイルにさらに変数を追加して長くするまで、exec()で正常に機能していました。新しいデータのため、fdf に問題があると思いましたが、なぜこのプロセスが ssh から正常に実行されるのでしょうか?
更新: また、 php -f test.php を実行してみました (これには、1 つの exec 行が含まれています)。ファイル全体を適切に出力します。しかし、http://mydomain.com/test.phpにアクセスしても、ファイルの一部しか取得できません。
exec() コマンドの後に何かをエコーさせ、正常に動作するため、スクリプトはタイムアウトしません。
まだファイルを書き込むことができるため、権限の問題になることはありません (ssh は root としてログインします)。
また、exec または passthru から戻り値または終了値を取得しようとしても、何も得られません。戻り値は常に 0 です。
更新:Apacheエラーログで、私は取得しています
[2010 年 9 月 17 日金曜日 20:00:57] [エラー] 未処理の Java 例外: [2010 年 9 月 17 日金曜日 20:00:57] [エラー] java.lang.OutOfMemoryError [2010 年 9 月 17 日金曜日 20:00:57] [エラー] ] <>
php_ini を 32M から 64M に変更しましたが、それでも取得できます。これらはすべて小さなファイルであることを考えると、それだけではないと思います。しかし、PHP はそのような子プロセスのメモリを制限できますか? そのための別の設定はどこかにありますか?
ヘルプ!