0

我有一个 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 下运行良好而无需更改?

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 回答