免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 5885 | 回复: 24
打印 上一主题 下一主题

关于perl上传的友情提醒【附上测试代码】 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-06-04 11:07 |只看该作者 |倒序浏览
最后总结: 不要用mod_perl来做上传,OVER。改为cgi模式的,一切OK了,阿门!


perl的垃圾回收机制简直是不堪忍受,undef根本释放不了内存

选perl来上传真是我最近做的最大的错误决定了。

本指望mod_perl会有效提高处理的并发数量,没成想一会儿内存就到90%了。

还望有意采用perl上传的兄弟引以为戒啊。

看来我得把它改为PHP的了,唉。

由于我对perl的了解不深,如果我说的有错误,还请指教。

perl版本 5.8.5

CGI版本
  1. $CGI::revision = '$Id: CGI.pm,v 1.227 2007/02/23 23:03:16 lstein Exp $';
  2. $CGI::VERSION='3.27';
复制代码
附上代码

upload.html
  1. <HTML>
  2. <HEAD>
  3.   <TITLE> upload </TITLE>
  4. </HEAD>
  5. <BODY>
  6.   <form enctype="multipart/form-data" method="post" action="http://localhost/perl/upload2.cgi">
  7.   <input type="file" name="uploadname"  />
  8.   <input type="submit" value="submit" />
  9.   </form>
  10. </BODY>
  11. </HTML>
复制代码
upload2.cgi
  1. BEGIN{
  2.         $ENV{TMPDIR}                                                = $ENV{DOCUMENT_ROOT}."/uploading";        #设置上传中的临时目录,此目录需每日清理
  3. }


  4. #use mydebug;
  5. #printEnv();
  6. #use CGI::Carp 'fatalsToBrowser';
  7. #use Data::Dumper;


  8. my ($cwd) = ($ENV{SCRIPT_FILENAME} =~ m!^(.+)/.*?$!);
  9. chdir $cwd;

  10. use strict;
  11. use CGI;
  12. use CGI qw/:standard/;

  13. $CGI::POST_MAX = 1024 * 1024 * 300;  # max 300MB posts

  14. if($ENV{REQUEST_METHOD} =~ /post/i)
  15. {
  16.         process_upload();
  17. }
  18. else
  19. {
  20.         fatal_error("Error Request");
  21. }


  22. sub fatal_error
  23. {
  24.         close(STDIN);
  25.     print "Content-type: text/html;charset=gbk\n\n";
  26.         print "发生错误:".shift(@_);
  27.         print "<a href='".$ENV{HTTP_REFERER}."'>返回</a>";
  28.         exit 0;
  29. }

  30. sub process_upload()
  31. {
  32.         my $query = CGI->new();
  33.         my $upload_filehandle        = $query->upload('uploadname');
  34.                 undef $upload_filehandle;
  35.                 undef $query;
  36.                 fatal_error(  "上传完毕" );
  37. }

  38. #__END__;
复制代码

[ 本帖最后由 gudai 于 2007-8-14 14:24 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2007-06-04 11:27 |只看该作者
肯定是你不會用!

论坛徽章:
0
3 [报告]
发表于 2007-06-04 12:50 |只看该作者
应该不会吧,没发现过这个问题

论坛徽章:
0
4 [报告]
发表于 2007-06-04 14:50 |只看该作者
飘过

论坛徽章:
0
5 [报告]
发表于 2007-06-04 15:01 |只看该作者
我知道php用的是临时文件.
我想用perl您自己也可做一个用临时文件上传方式的.
我用java就写过一个.
只是要精通http post 协议.

论坛徽章:
0
6 [报告]
发表于 2007-06-05 07:21 |只看该作者
直接用u盘烤过去,最方便啦

论坛徽章:
0
7 [报告]
发表于 2007-06-05 10:05 |只看该作者
原帖由 gudai 于 2007-6-4 11:07 发表
perl的垃圾回收机制简直是不堪忍受,undef根本释放不了内存

选perl来上传真是我最近做的最大的错误决定了。

本指望mod_perl会有效提高处理的并发数量,没成想一会儿内存就到90%了。

还望有意采用perl上传 ...

不会的吧 我们这一直用的挺好的呀

论坛徽章:
0
8 [报告]
发表于 2007-06-05 10:50 |只看该作者
我一直用这个,蛮好的啊!要不要帮忙啊?呵呵!

论坛徽章:
0
9 [报告]
发表于 2007-06-05 11:02 |只看该作者
一直工作良好~~~~

论坛徽章:
0
10 [报告]
发表于 2007-06-05 11:37 |只看该作者
如果你用mod_perl,应该好好研读有关mod_perl的资料,然后对自己的脚本做一个详细的诊断,mod_perl和CGI的工作方式不一样,处理不好很容易造成楼主的问题。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP