PHP中图片上传方式和原理
上传的字段:通过字符串传输的
上传文件(图片,文档):都要通过文件流的方式传输
form表单里面就要加 enctype=”multipart/form-data”;
之后文件就变成文件流传输 ;
<form action="4file.php" enctype="multipart/form-data" method="post"> 图片1上传:<input type="file" name="image"> <!--图片2上传:<input type="file" name="image2">--> <button type="submit">上传</button> </form>
在network中查看4file.php
PHP后端通过$_FILES来接受前端发送过来的文件;
var_dump($_FILES['image']);
$_FILES[‘image’] 文件上传接收到文件流信息–array数组
1. name 上传文件的名称 ss.bmp
2. type 上传文件的MIME类型 image/bmp
3. tmp_name 服务器存放上传文件的临时目录地址C:\xampp\tmp\php89E1.tmp
4. error 上传文件时,错误信息
0 代表上传成功;
1 代表文件超出了php.ini中upload_max_filesize限制的值;
2 代表超过了php.ini中max_file_size限制值;
3 代表文件只有部分上传;
4 代表没有文件上传;
6 代表找不到临时文件夹;
7 代表写入失败;
size 上传文件的大小 903750 单位是b 1024B=1kb
图片上传原理
<!--html页面--> <form action="file.php" enctype="multipart/form-data" method="post"> 图片1上传:<input type="file" name="image"> <!--图片2上传:<input type="file" name="image2">--> <button type="submit">上传</button> </form>
//php页面 $oldPath=$_FILES['image']['tmp_name']; move_uploaded_file($oldPath,"./uplode/".$_FILES['image']['name']);
解决图片上传时重名问题
前端通过给form加上enctype将表单里面的文件转换为文件流发送给后端
后端接收这个发过来的文件流,生成一个临时文件,尾缀名.tmp文件,存放在服务器的临时文件夹
在利用 tmp_name 来获取到临时文件路径和临时文件名称,利用 move_uploaded_file(tmpPath,targePath);将临时文件移动到你需要存放的目标文件夹中
命名的时候不能以用户的图片名作为命名,这样会出现重名文件覆盖的情况;
文件上传的命名规则
当前上传文件服务时间戳+4位随机数
time()
rand(1000,9999);
time+rand(1000,9999)+后缀名
<?php //文件上传的命名规则 $tmp_path=$_FILES['image']['tmp_name']; $type=$_FILES['image']['type']; $wzm=substr($type,strpos($type,'/')+1); //echo strpos($type,'/')."<br>"; $target_path=time().rand(10000000,99999999).'.'.$wzm; move_uploaded_file($tmp_path,$target_path); ?>
推荐阅读
-
PHP 中 Orientation 属性判断上传图片是否需要旋转
-
PHP中的插件机制原理和实例
-
Dynamics CRM 365中结合注释和WebApi实现图片上传
-
Python中实现单例模式的n种方式和原理
-
在Asp.Net Core中配置使用MarkDown富文本编辑器实现图片上传和截图上传(开源代码.net core3.0)
-
PHP实现本地图片上传和验证功能
-
php中curl和soap方式请求服务超时问题的解决
-
php获取远程图片的两种 CURL方式和sockets方式获取远程图片
-
php getimagesize 上传图片的长度和宽度检测代码
-
PHP使用curl请求实现post方式上传图片文件功能示例