让你同时上传 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 DataGrid 实现代码
Aug 12 PHP
php加密解密函数authcode的用法详细解析
Oct 28 PHP
PHP页面中文乱码分析
Oct 29 PHP
php读取目录及子目录下所有文件名的方法
Oct 20 PHP
php自定义urlencode,urldecode函数实例
Mar 24 PHP
php+ajax 实现输入读取数据库显示匹配信息
Oct 08 PHP
yii数据库的查询方法
Dec 28 PHP
CI框架支持$_GET的两种实现方法
May 18 PHP
Yii2中YiiBase自动加载类、引用文件方法分析(autoload)
Jul 25 PHP
PHP7扩展开发之基于函数方式使用lib库的方法详解
Jan 15 PHP
PHP生成腾讯云COS接口需要的请求签名
May 20 PHP
使用git迁移Laravel项目至新开发环境的步骤详解
Apr 06 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
星际玩家的三大定律
2020/03/04 星际争霸
DC最新动画电影:《战争之子》为何内容偏激,毁了一个不错的漫画
2020/04/09 欧美动漫
php 计划任务 检测用户连接状态
2012/03/29 PHP
ThinkPHP写数组插入与获取最新插入数据ID实例
2014/11/03 PHP
PHP实现清除wordpress里恶意代码
2015/10/21 PHP
php微信开发之谷歌测距
2018/06/14 PHP
Thinkphp 框架扩展之应用模式实现方法分析
2020/04/27 PHP
javascript 闭包详解
2015/02/15 Javascript
jQuery结合AJAX之在页面滚动时从服务器加载数据
2015/06/30 Javascript
jQuery获取字符串中出现最多的数
2016/02/22 Javascript
基于jQuery实现点击列表加载更多效果
2016/05/31 Javascript
BootStrap学习系列之Bootstrap Typeahead 组件实现百度下拉效果(续)
2016/07/07 Javascript
20分钟打造属于你的Bootstrap站点
2016/07/27 Javascript
14 个折磨人的 JavaScript 面试题
2016/08/08 Javascript
jQuery过滤选择器经典应用
2016/08/18 Javascript
再谈Javascript中的异步以及如何异步
2016/08/19 Javascript
javascript实现简单的on事件绑定
2016/08/23 Javascript
javascript 实现文本使用省略号替代(超出固定高度的情况)
2017/02/21 Javascript
vue之浏览器存储方法封装实例
2018/03/15 Javascript
JS html事件冒泡和事件捕获操作示例
2019/05/01 Javascript
记录vue项目中遇到的一点小问题
2019/05/14 Javascript
JavaScript实现星级评价效果
2019/05/17 Javascript
electron实现静默打印的示例代码
2019/08/12 Javascript
jquery将json转为数据字典的实例代码
2019/10/11 jQuery
javascript实现鼠标点击生成文字特效
2019/12/24 Javascript
jQuery 移除事件的方法
2020/06/20 jQuery
在Python3中使用asyncio库进行快速数据抓取的教程
2015/04/02 Python
Python简单进程锁代码实例
2015/04/27 Python
Python找出list中最常出现元素的方法
2016/06/14 Python
Python基于递归算法实现的走迷宫问题
2017/08/04 Python
Python基础之getpass模块详细介绍
2017/08/10 Python
详解python中的装饰器
2018/07/10 Python
jupyter notebook读取/导出文件/图片实例
2020/04/16 Python
CSS3,线性渐变(linear-gradient)的使用总结
2017/01/09 HTML / CSS
JSF的标签库有哪些
2012/04/27 面试题
python for循环赋值问题
2021/06/03 Python