让你同时上传 1000 个文件 (二)


Posted in PHP onOctober 09, 2006

文件提交页面既已生成,下面任务就很明确了:将提交的文件内容保存到服务器上。

下面我们用两种方法来实现这个功能:

1. 用 PHP 来保存:
我们先定义一个文件保存函数 fup() 它有两个参数:
     $filename: 文件内容
     $fname: 文件名(包含路径)
剩下的就是写一个循环将文件依次写入服务器。这里要简单说明一下:
PHP 对于上传文件的处理是这样的:如果提交的文件框我为 file0, 那么提交给 PHP 的文件内容保存在变量 $file0 中,而文件名则保存在 $file0_name 中。这样在这个循环中我要做的就是将提交页面提交的内容分解出来,实现过程请看下面的代码。

fileup.php
----------------------------------------------------------------------
<?
    function fup($filename,$fname)
    {        If($filename != "none") {
                copy($filename,$fname);
                unlink($filename);  
            }
    }

    for($i=0;$i<$cnt;$i++)
    {
        $ffnn="file".$i;
        $ffnnname=$ffnn."_name";
        $ffpath="path".$i;

        //print $$ffnn;
        print $$ffnnname;
        print "<br>";

        fup($$ffnn,$$ffpath.$$ffnnname); //"../www/test/tmp/"
    }
?>
----------------------------------------------------------------------

2. 用 PERL 来保存:
它们实现的原理完全一样,在此不多说,请看代码:

fileup.cgi(fileup.pl)
----------------------------------------------------------------------
#!/usr/bin/perl  

use CGI qw/:standard/;  

if ($ENV{'CONTENT_TYPE'} !~ /multipart/form-data/) {  
  print "Cache-Control: no-cachenPragma: no-cachen" .  
    "Content-Type: text/htmlnn" .  
    "<html><body>Your web browser cannot upload files. Sorry.</body></html>";  
  exit 0;  
}

$cntfile=param('cnt');
print header;  
print start_html;  
#print "Receiving Please wait....";

&g_head;

#$writed = '../www/test/tmp/';

for ($i=0;$i<$cntfile;$i++){
    $paramfile = 'file'.$i;
    $parampath='path'.$i;

    $writed=param($parampath);

    &upfile;
    &g_body;
}

&g_bott;

#<<<<<<<<<<<<<<<<<<<<<以下为自定义过程<<<<<<<<<<<<<<<<<<<<<<<<<

sub upfile
{
    $maxdata = 512000;  
#    $writed = '../www/test/tmp/';  

    $strRFname=reverse $xfile;
    $intIndex=index($strRFname,'\');
    $strNetFname=substr($strRFname,0,$intIndex);
    $strNetFname=scalar reverse $strNetFname;

     
    if((stat $xfile)[7]>$maxdata){  
        print "Status: 411 Size Not Allowedn" .  
            "Content-Type: text/htmlnAllow: POSTnn" .  
            "<html><head><title>411 411 Size Not Allowed</title></head><body><h1> You got big problem.  Try again.</h1></body></html>n";  
        exit 0;  
    }  

     
    binmode $xfile;  
    use File::Copy;  
    copy($xfile,$writed.$strNetFname);  
}

sub g_head{
    print '<table border=1 align=center>';
    print '<tr><td colspan=3 align=center>文件上传结果(Upload Result)</td></tr>';
    print '<tr align=center>';
    print '    <td>SourceFile:</td>';
    print '    <td>DestFile:</td>';
    print '    <td>Upload</td>';
    print '</tr>';
}

sub g_body{
    print '<tr>';
    print '    <td>'.$xfile .'</td>';
    print '    <td>'.$writed.$strNetFname.'</td>';
    print '    <td>OK!</td>';
    print '</tr>';
}

sub g_bott{
    print '</table>';
}
----------------------------------------------------------------------
如有好的建议请 Email: gearsoft@netease.com  

【本文版权归作者gearsoft与奥索网共同拥有,如需转载,请注明作者及出处】     

PHP 相关文章推荐
PHP 存取 MySQL 数据库的一个例子
Oct 09 PHP
php下实现农历日历的代码
Mar 07 PHP
PHP连接access数据库
Mar 27 PHP
php数组应用之比较两个时间的相减排序
Aug 18 PHP
在Windows下编译适用于PHP 5.2.12及5.2.13的eAccelerator.dll(附下载)
May 04 PHP
解决PHP在DOS命令行下却无法链接MySQL的技术笔记
Dec 29 PHP
使用php批量删除数据库下所有前缀为prefix_的表
Jun 09 PHP
PHP把数字转成人民币大写的函数分享
Jun 30 PHP
php定义一个参数带有默认值的函数实例分析
Mar 16 PHP
php微信公众平台配置接口开发程序
Sep 22 PHP
PHP实现用户异地登录提醒功能的方法【基于thinkPHP框架】
Mar 15 PHP
php获取小程序码的实现代码(B类接口)
Jun 13 PHP
一个可以删除字符串中HTML标记的PHP函数
Oct 09 #PHP
利用static实现表格的颜色隔行显示
Oct 09 #PHP
PHP 和 XML: 使用expat函数(三)
Oct 09 #PHP
PHP 和 XML: 使用expat函数(二)
Oct 09 #PHP
PHP 和 XML: 使用expat函数(一)
Oct 09 #PHP
用PHP动态生成虚拟现实VRML网页
Oct 09 #PHP
其他功能
Oct 09 #PHP
You might like
手冲咖啡应该是现代精品咖啡店的必备选项吗?
2021/03/03 冲泡冲煮
php SQL之where语句生成器
2009/03/24 PHP
模板引擎正则表达式调试小技巧
2011/07/20 PHP
php数组函数序列之ksort()对数组的元素键名进行升序排序,保持索引关系
2011/11/02 PHP
分享五个PHP7性能优化提升技巧
2015/12/07 PHP
Laravel框架定时任务2种实现方式示例
2018/12/08 PHP
PHP利用百度ai实现文本和图片审核
2019/05/08 PHP
jQuery EasyUI API 中文文档 - MenuButton菜单按钮使用介绍
2011/10/06 Javascript
体验js中splice()的强大(插入、删除或替换数组的元素)
2013/01/16 Javascript
超炫的jquery仿flash导航栏特效
2014/11/11 Javascript
JQuery EasyUI Layout 在from布局自适应窗口大小的实现方法
2016/05/28 Javascript
Ionic如何实现下拉刷新与上拉加载功能
2016/06/03 Javascript
BootStrap Datetimepicker 汉化的实现代码
2017/02/10 Javascript
layui表格实现代码
2017/05/20 Javascript
Vue列表页渲染优化详解
2017/07/24 Javascript
浅谈Vuex@2.3.0 中的 state 支持函数申明
2017/11/22 Javascript
基于百度地图api清除指定覆盖物(Overlay)的方法
2018/01/26 Javascript
element-ui中的select下拉列表设置默认值方法
2018/08/24 Javascript
vue-image-crop基于Vue的移动端图片裁剪组件示例
2018/08/28 Javascript
JavaScript实现数字前补“0”的五种方法示例
2019/01/03 Javascript
vue中node_modules中第三方模块的修改使用详解
2019/05/31 Javascript
JS中FileReader类实现文件上传及时预览功能
2020/03/27 Javascript
Vue点击切换Class变化,实现Active当前样式操作
2020/07/17 Javascript
[41:20]2014 DOTA2华西杯精英邀请赛 5 24 NewBee VS DK
2014/05/26 DOTA
python 切片和range()用法说明
2013/03/24 Python
用Python下载一个网页保存为本地的HTML文件实例
2018/05/21 Python
在 Jupyter 中重新导入特定的 Python 文件(场景分析)
2019/10/27 Python
La Redoute英国官网:法国时尚品牌
2017/04/27 全球购物
ghd官网:英国ghd直发器品牌
2018/05/04 全球购物
教师自荐信范文
2013/12/09 职场文书
妇联主席先进事迹
2014/05/18 职场文书
2014财务部年度工作总结
2014/12/08 职场文书
文明礼貌主题班会
2015/08/14 职场文书
幼儿园托班教育随笔
2015/08/14 职场文书
我的暑假生活作文(五年级)范文
2019/08/07 职场文书
MySQL连接查询你真的学会了吗?
2021/06/02 MySQL