mod_perl下的JSON :: XS失败并发出POST请求

时间:2016-08-18 18:01:51

标签: json perl mod-perl2 xs

我在Ubuntu 16.04.1 LTS上使用Apache和mod_perl的默认安装,我也使用默认的JSON :: XS重现了这一点,并且我从CPAN JSON-XS-3.02更新到最新版本。

如果我不使用mod_perl,下面的代码适用于所有情况。

通过mod_cgi将perl与POST和GET请求一起使用时,下面的脚本和html工作。

但是,如果我使用的是mod_perl并且我使用了POST(如提供的html中那样),则会失败," Hello"不打印,我的apache日志文件中出现以下错误。

用法:JSON :: XS :: new(klass)。

如果我通过GET方法传递相同的参数,脚本工作正常。

test2.pl

#!/usr/bin/perl
use strict;
use warnings;
use CGI;
use JSON::XS;

my $q = new CGI();
print $q->header(-type => 'text/plain');
my $action = $q->param('a');
my $json_str = '{"foo":"bar"}';
my $pscalar = JSON::XS->new->utf8->decode($json_str);
print "Hello";
exit 1;

HTML来调用上面的内容(在服务器上命名为test2.pl)

<html>
<body>
<form action="test2.pl" method="POST">
<input type="text" name="a"/>
<button type="submit">
</form>
</body>
</html>

1 个答案:

答案 0 :(得分:0)

好的所以这是一次相当疯狂的追逐,分析apache核心转储和堆栈跟踪,修复那些并非真正存在的错误......长话短说。

我试图使用

将include目录添加到我的perl

PerlSwitches -I / usr / local / lib / site_perl / my_new_directory

作为其中的一部分,我添加了

PerlOptions + Parent 以便我为每个虚拟主机获取一个新的解释器,这样我的-I一次只对一个虚拟主机有效。

我在启用mod_perl之前添加了这些标志,所以当我启用mod_perl时,它从未起作用。

删除 PerlOptions + Parent 的内容已按预期启动。

作为旁注,看起来+父母在一般情况下让事情变得难以理解。