PHP向Perl CGI传值的最简实现及Perl高版本兼容问题求助
问题修复方案:PHP表单传值到Perl CGI脚本
一、不使用CGI模块的实现方案
你的Perl代码未初始化%FORM哈希,也没有读取并解析POST请求内容,同时缺少HTTP响应头,导致无法正常运行。以下是修复后的代码:
修复后的Perl CGI脚本
#!/usr/bin/perl -w # 读取POST请求内容 my $content_length = $ENV{CONTENT_LENGTH} || 0; read(STDIN, my $post_data, $content_length); # 解析表单数据到%FORM哈希 my %FORM; foreach my $pair (split /&/, $post_data) { my ($key, $value) = split /=/, $pair; # 解码URL编码的字符 $key =~ s/\+/ /g; $key =~ s/%([0-9A-Fa-f]{2})/chr(hex($1))/eg; $value =~ s/\+/ /g; $value =~ s/%([0-9A-Fa-f]{2})/chr(hex($1))/eg; $FORM{$key} = $value; } # 输出HTTP响应头(必须) print "Content-Type: text/plain\n\n"; # 输出获取到的值 my $musician_fn = $FORM{musician_fn}; print "$musician_fn";
说明
- 通过
$ENV{CONTENT_LENGTH}获取POST数据长度,再从STDIN读取完整请求内容 - 手动解析URL编码的键值对,填充到
%FORM哈希中 - 必须输出HTTP响应头,否则浏览器无法正确识别和解析响应内容
二、CGI模块在Perl 5.36.0的修复方案
原有代码存在语法错误和拼写问题,导致在高版本Perl中失效,修复如下:
修复后的Perl CGI脚本
#!/usr/bin/perl -w # 注意use关键字需小写,Perl区分大小写 use CGI qw(:standard); # 获取表单参数 my $musician_fn = param("musician_fn"); # 输出HTTP响应头(使用CGI模块方法更规范) print header('text/plain'); # 修正变量拼写错误:$musian_fn → $musician_fn print "$musician_fn";
说明
- 语法修正:
Use改为小写use,Perl对关键字大小写严格敏感 - 变量拼写修正:修正
$musian_fn为$musician_fn,避免未定义变量报错 - 响应头规范:使用CGI模块的
header()方法输出标准HTTP响应头 - 若Perl环境未安装CGI模块,可通过
cpan CGI命令完成安装
内容的提问来源于stack exchange,提问作者Mitsuru Kido
相关产品推荐
相关产品推荐

