+ -
当前位置:首页 → 问答吧 → PHP多文件上传个人理解总结

PHP多文件上传个人理解总结

时间:2007-12-18

来源:互联网

多文件上传是PHP中一基础应用,在此把相关知识向大家详细介绍一下,本人水平有限,还请多提意见。大家一起进步。
        上传文件HTML的输入标签FILE类型中的名称后要加[],作用是在HTML中向PHP建立数组,比如名称为pictures,多文件引用名称则为pictures[],实例如下:
复制内容到剪贴板
代码:

<form action="upload.php" method="post" enctype="multipart/form-data">
<p>
<input type="file" name="pictures[]" /><br />
<input type="file" name="pictures[]" /><br />
<input type="file" name="pictures[]" /><br />
<input type="submit" value="上传" />
</p>
</form> //手册中实例。
利用HTML文件建立数组的方法手册中是这样讲解的:

        要使你的 <form> 结果被当成 array 发送到 PHP 脚本,要对 <input>,<select> 或者 <textarea> 单元这样命名:
           <input name="MyArray[]" />
           <input name="MyArray[]" />
           <input name="MyArray[]" />
           <input name="MyArray[]" />
        注意变量名后的方括号,这使其成为一个数组。


        可以通过给不同的单元分配相同的名字来把单元分组到不同的数组里:
           <input name="MyArray[]" />
           <input name="MyArray[]" />
           <input name="MyOtherArray[]" />
           <input name="MyOtherArray[]" />
        这将产生两个数组,MyArray 和 MyOtherArray,并发送给 PHP 脚本。


        还可以给数组分配指定的键名:
           <input name="AnotherArray[]" />
           <input name="AnotherArray[]" />
           <input name="AnotherArray[email]" />
           <input name="AnotherArray[phone]" />
        AnotherArray 数组将包含键名 0,1,email 和 phone。

        注意: 指定数组的键名是 HTML 的可选项。如果不指定键名,则数组被按照单元在表单中出现的顺序填充。第一个例子将包含键名 0,1,2,3。


        以上HTML点击上传后,通过$_FILES超级全局变量进行读取,$_FILES将会把HTTP POST 方法传递上来的文件信息组合成数组,一个文件数组形式为二维。二个以上文件数组形式为三维。


   $_FILES的使用方法:
$_FILES['userfile']['name']
客户端机器文件的原名称。
$_FILES['userfile']['type'] 文件的 MIME 类型,如果浏览器提供此信息的话。一个例子是“image/gif”。不过此 MIME 类型在 PHP 端并不检查,因此不要想当然认为有这个值。
$_FILES['userfile']['size'] 已上传文件的大小,单位为字节。
$_FILES['userfile']['tmp_name'] 文件被上传后在服务端储存的临时文件名。
$_FILES['userfile']['error']


        下面是一个文件上传,此文件上传后$_FILES数组内将会产生其信息,因为是一个文件所以是二维的,为了便于大家理解我们将$_FILES用PRINT_R输出查看其结构。

HTML文件:
复制内容到剪贴板
代码:

<form action="upload.php" method="post" enctype="multipart/form-data">
<p>
<input type="file" name="pictures" /><br />
<input type="submit" value="上传" />
</p>
</form>
PHP接收文件:
复制内容到剪贴板
代码:
         
<?php
print_r($_FILES);
?>
将其令存为UPLOAD.PHP,运行上面的HTML选择一个文件上传,比如文件名为Thumbs.db,在IE浏览器内单击“查看”,“源代码”。显示如下:
Array
(
    [pictures] => Array
        (
            [name] => Thumbs.db                                                       //原文件名
            [type] => application/octet-stream                                     //文件类型
            [tmp_name] => D:\EasyPHP\\tmp\php64.tmp                    //临时存储目录及文件名
            [error] => 0                                                                       //错误代码 0为上传成功
            [size] => 23040                                                                 //文件大小
        )
)根据此信息,结合上面$_FILES的使用方法,大家应该能理解的更深刻一些。


下面看一下多文件上传,三个文件名分别为FILE1.TXT,FILE2.TXT,FILE3.TXT,然后用PRINT_R输出查看其结构:

HTML文件代码:
复制内容到剪贴板
代码:

<form action="upload.php" method="post" enctype="multipart/form-data">
<p>
<input type="file" name="pictures[]" /><br />
<input type="file" name="pictures[]" /><br />
<input type="file" name="pictures[]" /><br />
<input type="submit" value="上传" />
</p>
</form>
PHP接收文件代码:
复制内容到剪贴板
代码:
         
<?php
print_r($_FILES);
?>
查看源文件:

Array
(
    [pictures] => Array
        (
            [name] => Array
                (
                    [0] => file1.txt
                    [1] => file2.txt
                    [2] => file3.txt
                )
            [type] => Array
                (
                    [0] => application/octet-stream
                    [1] => application/octet-stream
                    [2] => application/octet-stream
                )
            [tmp_name] => Array
                (
                    [0] => D:\EasyPHP\\tmp\php47.tmp
                    [1] => D:\EasyPHP\\tmp\php48.tmp
                    [2] => D:\EasyPHP\\tmp\php49.tmp
                )
            [error] => Array
                (
                    [0] => 0
                    [1] => 0
                    [2] => 0
                )
            [size] => Array
                (
                    [0] => 94289
                    [1] => 65536
                    [2] => 102400
                )
        )
)
        假设名为 /file1.txt  和 /file2.txt 的文件被提交,则 $_FILES['pictures']['name'][0] 的值将是 file1.txt,而 $_FILES['pictures']['name'][1] 的值将是 file2.txt。类似的,$_FILES['file2.txt']['size'][0] 将包含文件 file1.txt 的大小,依此类推。

[ 本帖最后由 hljwxdn 于 2007-12-18 02:03 编辑 ]

作者: hljwxdn   发布时间: 2007-12-18

应鼓励原创精品。

作者: luzhou   发布时间: 2007-12-18

作者: dzjzmj   发布时间: 2007-12-18

作者: cld007   发布时间: 2007-12-18

作者: yulei568   发布时间: 2007-12-18

学习啊

作者: ly3551   发布时间: 2008-01-07

收下了~

作者: gincn   发布时间: 2008-02-04

应鼓励原创精品。

谢谢楼主hljwxdn分享

作者: php?   发布时间: 2008-02-04

我支持!

作者: gently   发布时间: 2008-02-19

谢谢了~~!

作者: 爱我别走   发布时间: 2008-02-20

不错

作者: bit   发布时间: 2008-02-21

受教了。。。

作者: hurrayboy   发布时间: 2008-02-22

作者: lxylxy888666   发布时间: 2008-02-25

顶,不错

作者: 清竹�w翔   发布时间: 2008-03-27

很详细,很好。收藏了

作者: applejuzi   发布时间: 2008-03-29

学习

作者: hexc   发布时间: 2008-04-10

学习,听老师讲课!

作者: ttapeng   发布时间: 2008-04-17

不错 我觉得php的数组太有用了

作者: hu_bird   发布时间: 2008-04-17

很不错

作者: phua   发布时间: 2008-07-26

楼主推荐的贴子太好了,刚刚还不信呢,在百度一搜传世私服也拿几个好站出来不敢独享,内森灵机一动,决心要在此事上大捞一笔。他四处打听黄金的货源,正好东印度公司有
一批黄金刚从印度运来,准备出售,而英国政府也想购买,只是觉得价格太 高,想等黄
金价格降下来再购进。刚出的新游戏比较耐玩魔域私服内森摸准了情况,立即将他带到英国打天下的威廉王子的300
万现金和自己走私英国货物赚来的大笔资金全部压上,抢先与东印 度公司成交购买黄金
80万磅。然后立刻抬高黄金价格,英国政府眼见黄金价格降不下来,前方军情又十万
火急,完美私服上面的游戏文章还比较有趣,只有从内森手中以高价购进。这一笔让内森赚得盆满钵满。
但内森的连环计后手不断,他又提出要护送这批黄金到威灵顿公爵的军中。当时法国对
英国进行严密的陆上封锁,此行风险极大,英国政府愿意付很高的价钱来运送 这批黄金
。比较老的一个站,版主没事的时候天天在上面玩游戏chuanqishijiesifu拿到这个差事之后,内森让他的弟弟杰姆斯通知法国政府,内森想运送黄金到法国,
结果英国政府非常愤怒,因为黄金流到法国会大大削弱英国的财政能 力。法国方面一听
这样令人欢欣鼓舞的大好事,岂有不大力支持的道理,立即下令法国警察沿途保护,一
路放行。看域名就知道找什么来着wanmeisifu哈哈,对楼主真厉害个别瞧出破绽的法国官员也被重金贿赂,装聋作哑。此贴已经被楼主加粗套黄了谢谢楼主!

作者: opqr802   发布时间: 2008-07-27