[Perl Other] Perl的CGI环境奇怪的问题

Aug 13th, 2009

转载本站文章请注明,转载自:扶凯[http://www.php-oa.com]

本文链接: http://www.php-oa.com/2009/08/13/perl-cgi-utf8.html

写了个小东西.在perl中使用open来打开一个shell的程式.但发现怎么样也不正常,经过很长时间的研究,发现对中文不行.才发现Perl有CGI的环境时,很多环境变量都不同了.

后来在shlle下测试了很久,发现是LANG在做怪,默认perl在apache的CGI调用下是LANG=C.

#!/usr/bin/perl -w
use CGI qw/:standard/;
use strict;

print header(-charset=>'utf-8');
print start_html(-title=>'videoinfo');
#$ENV{"LANG"} = 'en_US.UTF-8';
print p($ENV{"LANG"});
open INFO,"/usr/bin/mediainfo /tmp/测试.ts 2>&1 |" || die "print p($?)";
while(<INFO>){
        print p("$_");

}
system("env >/tmp/d");
print    end_html;

如上,后来又加了一条$ENV{"LANG"} = ‘en_US.UTF-8′;还是不好用,奇怪啦.

使用system,重定向shell的环境变量时,才发现.原来就算在perl中的LANG改变了,在CGI的环境中也不会改变Shell的环境变量.没法子,只能在open加载时来加入语言环境.

open INFO,"export  LANG=en_US.UTF-8 \&\& /usr/bin/mediainfo /tmp/测试.ts 2>&1 |" || die "print p($?)";

只能先这样啦,如果各位有更加好的建议,麻烦告诉我.

另外,对apache也有新的了解.httpd中可以修改perl的环境变量

PassEnv   指令传送shell中的环境变量   PassEnv   LANG
SetEnv 指令设置CGI环境变量               SetEnv   LANG   en_US.UTF-8

测试过了,可惜在我这种应用中无效.

Del.icio.us Google书签 Digg Live Bookmark Technorati Furl Yahoo书签 Facebook 百度搜藏 新浪 ViVi 365Key 网摘 天极网摘 和讯网摘 博拉网 POCO 网摘 饭否 QQ 书签 Digbuzz 我挖网 Mister Wong
Tags: ,
  1. zzxia
    Sep 14th, 2009 at 10:23
    Reply | Quote | #1

    不错不错,以前写CGI,经常被CGI的header搞死,

    我的MSN:zzxia-01@hotmail.com,可以加你吗

  2. zyg0x0
    Sep 2nd, 2011 at 06:17
    Reply | Quote | #2

    我现在在学习perl,但是不知道是方法不对还是什么问题,感觉老是学不会。您能不能写个perl的学习方法,给新手有点帮助 谢谢!

  3. admin
    Sep 2nd, 2011 at 06:19
    Reply | Quote | #3

    我也写得不好,你多写写就会了。