如何在perl mason CGIHandler中获取QUERY_STRING?

我需要在一家托管公司工作得很好的梅森网站上做一些维护,但需要转移到另一家托管公司.新的托管公司不支持ApacheHandler,所以我将代码更改为CGIHandler.

不幸的是,我不再将QUERY_STRING元素填充到泥瓦匠环境中,这使得它有点难!

我从这里获得了大量的处理程序代码:http://joe.pepersack.net/code/site-mason_handler.pl

处理程序正在设置如下:

$h = HTML::Mason::CGIHandler->new(
  comp_root     => $mason_root,
  data_dir      => $mason_data,
  allow_globals => $::MASON_GLOBALS,
  error_mode    => "output",
  default_escape_flags => "h"
);

一般搜索互联网并没有给我带来任何好处……

有谁知道ApacheHandler和CGIHandler之间的参数传递是否存在差异?如果他们被其他地方吃掉了,我怎么能测试CGIHandler是否首先找到了params?

任何帮助(或其他主要问题)都将非常感激.这个网站是为青少年筹集资金的,因此目前没有太多时间/支持重写它.

最佳答案 根据这个
http://marc.info/?l=mason&m=96320172801620&w=3)和我的经验,它应该在$ENV {QUERY_STRING}中提供.

也许您的设置已经厌倦了直接从Apache :: Request使用它,或者CGI服务器没有自动设置它?

http://cpansearch.perl.org/src/JSWARTZ/HTML-Mason-1.46/htdocs/CGIHandler.html开始:

This module also provides an $r request object for use inside
components, similar to the Apache request object under
HTML::Mason::ApacheHandler, but limited in functionality.

基于此:http://redmine.lighttpd.net/projects/lighttpd/wiki/MasonRecipe/11

### this seems to be necessary as lighttpd does not provide the PATH_INFO and the QUERY_STRING environment variables
## right' way to parse the REQUEST_URI out into PATH_INFO and QUERY_STRING
my $uri = $ENV{REQUEST_URI};
if ($uri =~ /\?/) {
  $uri =~ /^(.*?)\?(.*)/;
  $ENV{PATH_INFO} = $1;
  $ENV{QUERY_STRING} = $2;
} else {
  $ENV{PATH_INFO} = $uri;
  $ENV{QUERY_STRING} = "";
}
点赞