上传文件功能一般由两个部分组成,HTML页面和PHP处理部分。HTML页面主要是让用户选择所要上传的文件,php部分让我们可以把文件存储到服务器的指定目录。下面小慕就简单的把两者都写在一个php文件里了。
文件upload.php代码:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>文件上传</title> </head> <body> <h1>文件上传</h1> <div> <form action="upload.php" method="post" enctype="multipart/form-data"> <input type="file" name="upfile" /> <input type="submit" name="tj" value="上传" /> </form> <br /> <?php $dir="../uploadfile/"; if(isset($_POST["tj"])){ if($_FILES["upfile"]["name"]!=""){ if($_FILES["upfile"]["error"]>0){ echo "上传失败"; }else{ if(move_uploaded_file($_FILES['upfile']['tmp_name'],$dir.$_FILES["upfile"]["name"])){ echo "上传成功"; }else{ echo "上传失败"; } } }else{ echo("请选择上传文件"); } } ?> </div> </body> </html>
说明:
1、表单说明
(1)input标签中type="file",表明把输入作为文件来处理。
(2)enctype规定了在提交这个表单时要使用哪种内容类型。在表单需要二进制数据时,比如文件内容,请使用"multipart/form-data",如果要上传文件,这个属性是必要的。
(3)$dir="../uploadfile/";这里是上传文件的路径,一定要正确,不然会提示出错,当然你也可以按不同条件生成目录。
(4)还有文件名称,小慕这里选择的文件名称不可以是中文文件名,你可以通过转码方式使其支持,小慕的代码是使用原文件名称作为上传后文件名称的,这样使用原文件名的话如果上传同文件名的话先前的文件就是会被后来同名称文件的覆盖掉,你也可以自动生成文件名或者使用别的方法解决,这里比较简单小慕这里就不说了。
2、全局变量$_FILE
此数组包含有所有上传的文件信息。
以我们假设文件上传字段的名称如上例所示,为 upfile。则
$_FILES['upfile']['name']
客户端上传的文件的原名称。
$_FILES['upfile']['type']
文件的 MIME 类型,如果浏览器提供此信息的话。一个例子是“image/gif”。不过此 MIME 类型在 PHP 端并不检查,因此不要想当然认为有这个值。
$_FILES['upfile']['size']:已上传文件的大小,单位为字节。
$_FILES['upfile']['size']
已上传文件的大小,单位为字节。
$_FILES['upfile']['tmp_name']
文件被上传后在服务端储存的临时文件名。
$_FILES['upfile']['error']
和该文件上传相关的错误代码。
3、 关于错误码
$_FILES['upfile']['error']有以下几种类型
UPLOAD_ERR_OK
其值为 0,没有错误发生,文件上传成功。
UPLOAD_ERR_INI_SIZE
其值为 1,上传的文件超过了 php.ini 中 upload_max_filesize选项限制的值。
UPLOAD_ERR_FORM_SIZE
其值为 2,上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值。
UPLOAD_ERR_PARTIAL
其值为 3,文件只有部分被上传。
UPLOAD_ERR_NO_FILE
其值为 4,没有文件被上传。
UPLOAD_ERR_NO_TMP_DIR
其值为 6,找不到临时文件夹。PHP 4.3.10 和 PHP 5.0.3 引进。
UPLOAD_ERR_CANT_WRITE
其值为 7,文件写入失败。PHP 5.1.0 引进。
4、move_uploaded_file
文件被上传后,默认地会被储存到服务端的默认临时目录中(除非 php.ini 中的 upload_tmp_dir设置为其它的路径),文件名是随机的。如果该文件没有被移动到其它地方也没有被改名,则该文件将在表单请求结束时被删除。因此需要通过move_uploaded_file移动临时文件。
经实验copy也能完成move_uploaded_file的功能,为啥要用move_uploaded_file呢?有说法是move_uploaded_file会对上传文件做一些检查,防止copy引起的一些安全漏洞。但具体copy会带来什么问题呢?我并没有查到。有知道的同学,欢迎留言。
Anyway,既然php给了特定的函数,必然有一定道理,先这么用吧。
5、安全检查
可以考虑通过$_FILES['upfile']['size']和$_FILES['upfile']['type']对上传的文件做一些安全检查,比如限定上传类型,上传文件的大小等。
-----------------------------------------------------------------------------------------------------------------------------------
php上传文件相关配置参数说明
文件上传时也可能遇到服务器配置的问题等导致上传不成功,搞个了图片上传,死活不好使,不要怕认真检查原因,最厚可能就会发现是PHP参数配置的问题。下面小慕贴出与之相关的配置参数
下面总结下与文件上传有关的php参数,备忘之~
所有这些参数都在php.ini中设置。
1.file_uploads
设为On,允许通过HTTP上传文件
2.upload_tmp_dir
文件上传至服务器时用于临时存储的目录,如果没指定,系统会使用默认的临时文件夹(我的机器是/tmp)。
3.upload_max_filesize
允许上传文件大小的最大值,默认为2M。
4.post_max_size
Php可接收的post数据的最大值(包括表单里的所有值的总合),默认为8M。
5.memory_limit
每个php所最占的最大内存数,这个值要大于允许上传的文件大小。
6.max_execution_time
每个php运行的最长时间(秒),默认30秒。
7.max_input_time
php解析POST/GET数据的最长时间(秒),默认60秒。
---
转载请注明本文标题和链接:《php上传文件详解和相关的配置参数说明》