perl Apache2::Request 错误同时使用 param() 和 upload() 方法

标签 perl apache2 mod-perl

我在 mod_perl 环境中编码并使用 Apache2::Request 模块获取发布的数据。这工作正常,除了当我还使用 Apache2::Request 对象上传文件/获取文件的文件句柄时。如果单独使用这些方法,则没有问题。但是,如果我在同一个子例程中同时使用它们,我的 Apache 日志文件中会出现此错误:

[notice] child pid 27383 exit signal Segmentation fault (11)

这是我的代码:

my $r = shift;
use Apache2::Request;
use Apache2::Upload;
my $req = Apache2::Request->new($r, POST_MAX => 10 * 1024 * 1024,DISABLE_UPLOADS => 0);
my $img_url = $req->param('url');

my $upload = $req->upload('files[]');
my $filename = $upload->filename;
my $upload_filehandle = $upload->fh;
my $file_size = $upload->size;

Apache2::Upload 被包括在内,因为它被 Apache2::Request 使用。就像我说的,如果我注释掉以“my $img_url..”开头的行或上传部分,它就可以正常工作。但是,如果它们都出现在代码中,我会收到 502 代理错误,并且该错误会出现在 apache 日志文件中。

提前致谢!

最佳答案

我感谢这是一个老问题,所以我的回复有点晚了,但如果其他人偶然发现这个话题,我确实有一个解决方案。

问题是 New() 的 mod_perl 错误:

my $req = Apache2::Request->New($r);

(在你的情况下,你在那里定义了一些其他的东西,但它看起来与我所遭受的相同的段错误和偶发症状)。

Apache2::Request segfaults when $r isn't define,但有时它似乎会出现段错误,即使你已经将 @_ 转移到 $r(正如你所做的那样)。我无法解释为什么会发生这种情况,但我发现一个简单的更改可以阻止此问题的发生:

my $req = Apache2::Request->New(Apache2::RequestUtil->request);

因此您的代码大概如下所示:

my $req = Apache2::Request->new(Apache2::RequestUtil->request,
                                POST_MAX => 10 * 1024 * 1024,
                                DISABLE_UPLOADS => 0);

关于perl Apache2::Request 错误同时使用 param() 和 upload() 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8832001/

相关文章:

@INC 中的 Perl 错误 : Can't locate XFileConfig. pm

javascript - 最可行的 WebSocket/Perl 解决方案

apache - Mojolicious 模板缓存已过时

linux - 为什么waitpid不等待进程退出呢?

Perl 在使用空 substr 调用时 index() 的奇怪行为与不使用 Encode::decode()

perl - 与 Perl 模块相比,Perl 程序是否有标准或最佳实践?

.htaccess 为子域强制 http

apache2 - Apache 服务器 "ImportError: No module named site"

不相等的 Perl if 语句

android - 无法从 Android 模拟器访问本地主机,但在模拟器上它正在运行