您的位置:首页 > 编程语言 > PHP开发

php文件上传详解

2017-09-06 14:42 169 查看

1.PHP配置文件

首先,我们文件上传需要设定一下 php.ini 的配置文件。这是最基本的设置,如果这里设置不成功,那么代码写得再正确也没有用。基本的配置项目如下

file_uploads = on  #文件上传开启
upload_max_filesize= 200M  #文件上传的最大尺寸
upload_tmp_dir = c:/uploads/  #临时文件目录
post_max_size = 250M  #POST时最大尺寸,必须要大于 upload_max_filesize


2.上传时注意事项

1) 文件上传操作表单提交方法必须为 post

2)文件上传时,input type 必须为 file 类型

3)文件上传的表单中,需要增加一个隐含内容,代码如下,value 的单位是 B(字节)

<input type="hidden" name="MAX_FILE_SIZE" value="100000000">
      PS : MAX_FILE_SIZE限制文件上传大小总是被人忽略,我们在使用文件上传的时候总是会限制文件大小,然而我们通常通过$_FILES['thisfile']['error']判断文件是否上传成功是文件已经被发送到服务器端的临时文件夹里面,而我们想要看到的情况是在POST过程之前判断文件大小是否符合我们设置的范围,也就是不向服务器发送文件内容,而是直接在客户端提醒文件大小不符。这是一个非常棒的想法,不过MAX_FILE_SIZE仅仅是PHP对浏览器的一个建议,事实上目前主流的浏览器都没有采纳这个建议,所以使用MAX_FILE_SIZE来约束上传文件的大小形同虚设,可有可无。
      MAX_FILE_SIZE还有一个用场:后台PHP会判断接收到的文件大小是否大于这个值,如果大于,$_FILES['thisfile']['error']值为2,同时放弃保存临时文件,将$_FILES['thisfile']['size']置0。

4)enctype=”multipart/form-data ” 只有文件上传时才使用这个值,用来设置表单的MIME编码,默认情况这个编码格式是application/x-www-form-urlencoded,不能用于文件上传,只有使用了multipart/form-data,才能完整的传递文件数据,让服务器知道我们要传递一个文件并带有一些常规的表单信息。如下:

<form action="upload.php" method="post" enctype="multipart/form-data">
</form>

如果不加 enctype=”multipart/form-data”,文件上传是不会成功的。

3.文件上传(简单示例)

HTML:

<form action="" method="post" enctype="multipart/form-data">
<input type="hidden" name="MAX_FILE_SIZE" value="300000">
<input type="file" name="file">
<input type="submit" name="submit" value="提交">
</form>
       PHP:

<?php
if (!empty($_FILES['file'])) {//判断上传内容是否为空
if ($_FILES['file']['error'] > 0) {//判断上传错误信息
echo "上传错误:";
switch ($_FILES['file']['error']) {
case 1:
echo "上传文件大小超出配置文件规定值";
break;
case 2:
echo "上传文件大小超出表单中的约定值";
break;
case 3:
echo "上传文件不全";
break;
case 4:
echo "没有上传文件";
break;
}
} else {
list($maintype, $subtype) = explode("/", $_FILES['file']['type']);
if ($maintype != "image" || $subtype != "jpeg") {
echo "上传文件格式不正确";
} else {
if (!is_dir("./upfile")) {//判断指定目录是否存在
mkdir("./upfile");//创建目录
}
$path = './upfile/' . time() . strtolower(strstr($_FILES['file']['name'], "."));//定义上传文件名和存储位置
if (is_uploaded_file($_FILES['file']['tmp_name'])) {//判断文件上传是否为HTTP POST上传
if (!move_uploaded_file($_FILES['file']['tmp_name'],$path)) {//执行上传操作
echo "上传失败";
} else {
echo "文件:" . time() . strtolower(strstr($_FILES['file']['name'], ".")) . "上传成功,大小为:" . $_FILES['file']['size'] . "字节";
}
} else {
echo "上传文件:".$_FILES['file']['name']."不合法";
}
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  php 文件上传