1

スタック オーバーフロー ユーザーの皆様へ

次の問題について親切に助けていただければ幸いです: ext_filter が構成されたフォワード プロキシとして機能する Apache サーバーがあります: 応答が MIME タイプの PDF である場合は常に、フィルターが呼び出され (perl スクリプト)、PDF のコンテンツがSTDIN から読み取られます。STDIN から PDF を読み取り、ファイルに書き込むだけです。これはほとんどの場合うまく機能しますが、ある特定の Web サイトでは、次のように記述すると PDF の形式が正しくありません。

my $input_file = shift;
binmode STDIN;
open(OUT, ">" . $input_file);
binmode OUT;
foreach my $line (<STDIN>){
        print OUT $line;
}
close OUT;

代わりに 'tee' を呼び出す ('tee' を使用するようにフィルターを設定する) と、ファイルは正しく書き込まれます。不正な形式の PDF を分析すると、作成した PDF の xref テーブルの形式が不正であり、Adobe Reader で開くことができないことがわかります。sysopen、sysread などを使用したり、":raw" を使用したり、バイナリ ファイルを適切に書き込む他のいくつかの方法を既に試しましたが、何も機能しませんでした (バイナリ ファイルを書き込むためのドキュメントからコードをカット アンド ペーストしました)。Linux で 'tee' ユーティリティをフィルターとして使用する場合のみ、正しく記述されていました。これでは役に立ちません。perl スクリプトの一部として stdin からファイルに書き込めるようにする必要があります。助言がありますか?システムコールで 'tee' を呼び出し、perl プログラムの STDIN を与える方法があれば、うまくいくかもしれません。よろしくお願いします。

4

1 に答える 1