使用file :: copy在mod_perl下提供图像失败

时间:2012-10-23 19:48:48

标签: perl cgi mod-perl mod-perl2

我有一个CGI脚本,使用File :: Copy CPAN模块提供图像:

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下正常运行而无需更改?

2 个答案:

答案 0 :(得分: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的错误报告中详细了解这一点。

答案 1 :(得分:0)

除非您愿意更改File :: Copy或mod_perl(否定方式)。 File :: Copy需要一个与系统文件句柄相关联的文件句柄,但STDOUT是一个绑定文件句柄。