本文分为五个部分针对php上传文件进行分析讲解,具体内容如下
文件上传变量
将服务器上的临时文件移动到指定目录下
php.ini上传相关配置
error错误号
单文件上传实例
1.文件上传变量
- //$_FILES:文件上传变量
- #name 文件的名称
- #type 文件的类型
- #tmp_name 临时文件名
- #size 文件的大小
- #error 错误信息
- //Vevb.com
- $filename = $_FILES["myFile"]["name"];
- $type = $_FILES["myFile"]["type"];
- $tmp_name = $_FILES["myFile"]["tmp_name"];
- $size = $_FILES["myFile"]["size"];
- $error = $_FILES["myFile"]["error"];
2.将服务器上的临时文件移动到指定目录下
- //1.move_uploaded_file($tmp_name,$destination):将服务器上的临时文件移动到指定目录下
- #上传后文件名字,移动成功返回true,否则返回false
- move_uploaded_file($tmp_name,"D:/".$filename);
- //2.copy($tmp_name,$destination)
- copy($tmp_name,"D:/".$filename);
3.php.ini上传相关配置
- # file_uploads=On 支持HTTP上传
- # upload_tmp_dir="" 临时文件保存的目录
- # upload_max_filesize=2M 允许上传文件的最大值
- # max_file_uploads=20 允许一次上传的最大文件数
- # post_max_size=8M post方式发送数据的最大值
- # max_execution_time = 1 设置了脚本被解析器终止之前允许的最大执行时间,单位为秒,防止程序写的不好而占尽服务器资源
- # max_input_time = 60 脚本解析输入数据允许的最大时间,单位为秒
- # max_input_nesting_level = 64 设置输入变量的嵌套深度
- # max_input_vars = 1000 接受多少输入的变量
- # memory_limit = 128M 最大单线程的独立内存使用量
4.error错误号
- # 0,没有错误发生,文件上传成功。
- # 1,上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值。
- # 2,上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值。
- # 3,文件只有部分被上传。
- # 4,没有文件被上传。
- # 6,找不到临时文件夹。
- # 7,文件写入失败。
- # 8,上传的文件被PHP扩展程序中断
5.单文件上传实例
form.html
- <meta charset="UTF-8">
- <title>Document</title>
- <form action="fileUpload.php" method="post" enctype="multipart/form-data">
- 请选择你要上传的文件:
- <input type="file" name="myFile"><br>
- <input type="submit" value="上传文件">
- <!--限制客户端上传文件的最大值 隐藏域另起一行-->
- <!--<input type="hidden" name="MAX_FILE_SIZE" value="字节数">-->
- <!--accept设置上传文件的类型-->
- <!--<input type="file" name="myfile" accept="image/jpg,image/png,image/gif">-->
- </form>
fileUpload.php
- header("content-type:text/html;charset:utf-8");
- $fileInfo = $_FILES["myFile"];
- $filename = $fileInfo["name"];
- $type = $fileInfo["type"];
- $error = $fileInfo["error"];
- $size = $fileInfo["size"];
- $tmp_name = $fileInfo["tmp_name"];
- $maxSize=2*1024*1024;//允许的最大值
- $allowExt=array("jpeg","jpg","gif");
- $flag = true;//检测是否为真实的图片类型
- //判断错误号
- if($error == 0){
- //判断上传文件的大小
- if($size>$maxSize){
- exit("上传文件过大");
- }
- //检测文件类型
- //取出文件扩展名
- $ext = pathinfo($filename,PATHINFO_EXTENSION);
- if(!in_array($ext,$allowExt)){
- exit("非法文件类型");
- }
- //检测是否为真实的图片类型
- if($flag){
- if(@!getimagesize($tmp_name)){
- exit("不是正的图片类型");
- }
- }
- //创建目录
- $path = "D:/test/";
- if(!file_exists($path)){
- mkdir($path,0777,true);
- chmod($path,0777);
- }
- //确保文件名唯一,防止重名覆盖
- $uniName = md5(uniqid(microtime(true),true)).".".$ext;
- $destination = $path.$uniName;
- if(@move_uploaded_file($tmp_name,$destination)){
- echo "上传成功";
- }else{
- echo "上传失败";
- }
- }else{
- switch($error){
- case 1:
- case 2:
- case 3:
- case 4:
- case 6:
- case 7:
- case 8:
- echo "上传错误";
- break;
- }
- }
新闻热点
疑难解答