0

File::Copy CPAN モジュールを使用して画像を提供する CGI スクリプトがあります。

use File::Copy;
.... (set appropriate content header)
binmode STDOUT;
copy $imageFile, \*STDOUT || die "Image delivery failed: $!";

これは CGI では問題なく動作しますが、mod_perl で実行すると次のようになります。

[File::Copy::copy 140]  stat() on unopened filehandle STDOUT at /usr/share/perl/5.14/File/Copy.pm line 140.

これが予想される動作なのか、どこかにバグがあるのか​​どうかはわかりません。私は mod_perl を初めて使用し、現在ドキュメントの海に溺れていることに気づきました。スクリプトを変更せずに CGI または mod_perl で正常に動作するようにスクリプトを変更する方法はありますか?

4

2 に答える 2

1

mod_perl のドキュメントから

mod_perl では、CORE::print( ) (ファイルハンドル引数として STDOUT を使用するか、ファイルハンドルをまったく使用しない) は、出力を Apache::print( ) にリダイレクトします。これは、STDOUT ファイルハンドルが Apache に関連付けられているためです。

perltie の場合は BUGS セクションから

結合されたファイルハンドルはまだ不完全です。sysopen()、truncate()、flock()、fcntl()、stat()、および -X は現在トラップできません。

必要に応じて、 https://rt.perl.org/rt3//Public/Bug/Display.html?id=112164のバグ レポートでこれについて詳しく読むことができます。

于 2012-10-24T15:36:58.133 に答える
0

File::Copy や mod_perl を (否定的な方法で) 変更したい場合を除きます。File::Copy は、システム ファイル ハンドルに関連付けられたファイル ハンドルを想定していますが、STDOUT は関連付けられたファイル ハンドルです。

于 2012-10-23T20:14:02.950 に答える