-
缩略的关键是imagecopyresampled(dst_image(目标图-画布), src_image(原图), dst_x(目标图复制起点x), dst_y(目标图复制起点y), src_x(从原图x起点复制), src_y(从原图y起点复制), dst_w(目标图复制的宽度), dst_h(目标图复制的高度), src_w(原图的宽度), src_h(原图的高度)),把这个函数里面的参数都准备好,接调用,保存,销毁就可以了
查看全部 -
<?php
/*生成缩略图的理念就是:从源图片的采样 拷贝到 新创建的画布,然后显示*/
//将指定图片定义为一个变量
$filename='des_big.jpg';
//通过函数得到图片相应属性 getimagesize — 取得图像相应属性
list($src_w,$src_h,$imagetype)=getimagesize($filename);
//根据得到的类型$imagetype得到$mime
$mime=image_type_to_mime_type($imagetype);
//echo $mime; 结果是image/jpeg
//根据图片类型对应的创建新图像的函数 来创建新图像 //举例:image/jpeg类型对应的是imagecreatefromjpeg()函数,image/gif类型对应的是imagecreatefromgif()函数,依次类推
//imagecreatefromgif/jpeg()等函数的作用是 返回一图像标识符,代表了从给定的文件名取得的图像。
$createFun=str_replace("/","createfrom",$mime);//str_replace — 子字符串替换 这里把它写活
//同样,图片类型不同对应的输出函数也是不同,例:image/jpeg类型对应的是imagejpeg()函数,image/gif类型对应的是imagegif()函数,这里也把它写活
$outFun=str_replace("/",null,$mime);//str_replace — 子字符串替换
//从源图片采样
$src_image=$createFun($filename);
//根据需求创建画布,因为缩放后得到的新图片 即将粘贴到这个画布
$dst_50_image=imagecreatetruecolor(50,50);
$dst_220_image=imagecreatetruecolor(220,220);
$dst_350_image=imagecreatetruecolor(350,350);
$dst_800_image=imagecreatetruecolor(800,800);
//将缩放后的新图片粘贴到画布 即将采样后并且处理的图片粘贴到指定画布 //imagecopyresampled — 重采样图片拷贝部分图像并调整大小
imagecopyresampled($dst_50_image,$src_image,0,0,0,0,50,50,$src_w,$src_h);
imagecopyresampled($dst_220_image,$src_image,0,0,0,0,220,220,$src_w,$src_h);
imagecopyresampled($dst_350_image,$src_image,0,0,0,0,350,350,$src_w,$src_h);
imagecopyresampled($dst_800_image,$src_image,0,0,0,0,800,800,$src_w,$src_h);
//显示/输出 拷贝后 粘贴到画布的 新图片, 并且保存到指定目录下.叫什么名字
$outFun($dst_50_image,"uploads/image_50/".$filename);
$outFun($dst_220_image,"uploads/image_220/".$filename);
$outFun($dst_350_image,"uploads/image_350/".$filename);
$outFun($dst_800_image,"uploads/image_800/".$filename);
//销毁资源
imagedestroy($src_image);
imagedestroy($dst_50_image);
imagedestroy($dst_220_image);
imagedestroy($dst_350_image);
imagedestroy($dst_800_image);
?>
查看全部 -
老师的判定没上传有bug 请改成我的 //如果没有上传图片退出 //传过来的空值也是一个三维数组 所以要用如下判断是否有文件上传 if(empty($_FILES['myfile']['name']['0'])){ return; }查看全部
-
这是多个单文件上传,不是多文件上传;
查看全部 -
文件上传:明明PHP.ini配置中已经设置upload_max_filesize来限制单个文件上传大小的值了,这里为什么还要设置$maxSize?
因为一个服务器上的网站有好多页面有form表单,每个页面的表单对单个文件上传限制大小不同,所以这里通过代码单独设置单个页面的表单的单个文件上传大小限制(一对一设置),配置里面的限制是针对整个服务器的;
这里单个页面表单的大小限制$maxSize的值一定 =< PHP.ini里面的upload_max_filesize单个文件上传大小限制的值查看全部 -
mkdir($path,0777,true); 第一个参数:必须,代表要创建的多级目录的路径; 第二个参数:设定目录的权限,默认是 0777,意味着最大可能的访问权; 第三个参数:true表示允许创建多级目录。
查看全部 -
文件上传需配置: 服务器端的配置(php.ini配置文件的修改) 1、file_uploads=On,支持通过HTTP POST方式上传文件 2、upload_tmp_dir=临时文件保存目录 3、upload_max_filesize=2M,默认值2M,上传文件的最大大小是2M 4、post_max_size=8M,表单以post方式发送数据的最大值,默认值是8M 注意:post_max_size的值必须大于等于upload_max_filesize的值 客户端的配置 1、<input type='hidden' name='MAX_FILE_SIZE' value='1024'/> 2、<input type='file' name='myFile' accept='文件的MIME类型,...'/>
查看全部 -
文件上传:已经有upload_max_fielsize来限制文件大小了,为什么还要MAX_FILE_SIZE来限制文件大小???在MAX_FILE_SIZE是在html代码里主要目的是什么??是在客户端限制、监督、提示用户上传文件的大小是否合格的,其值得大小取决于服务器端PHP.ini中upload_max_fielsize的大小;因为PHP程序是无法判断用户本 地文件大小的。所以等到我们的PHP来判断文件大小的时候,那个文件其实已经上传到服务器了。这时候再判断超过限制了,不允许上传。可就有点马后炮了,所以MAX_FILE_SIZE是在用户将文件上传之前就判断将要上传的文件是否超过限制,超限制,则不允许用户上传;
不同点:
MAX_FILE_SIZE是在客户端HTML代码里;(客户端容易被修改哦)upload_max_fielsize是在服务器端,PHP.ini配置文件里或者PHP代码里;
其中,在设置的时候,post_max_size的值一定要大于upload_max_fielsize的值,因为表单一次提交可能是好几个<input>框,意思是单次提交可能是好几个文件;
查看全部 -
PHP获取文件后缀名(有几十种方法,这里提供7种方法)
1.$file = 'x.y.z.png';
echo substr(strrchr($file, '.'), 1);
解析:strrchr($file, '.')
strrchr() 函数查找字符串在另一个字符串中最后一次出现的位置,并返回从该位置到字符串结尾的所有字符
2.$file = 'x.y.z.png';
echo substr($file, strrpos($file, '.')+1);
解析:strrpos($file, '.')
查找 "." 在字符串中最后一次出现的位置,返回位置 substr()从该位置开始截取
3.$file = 'x.y.z.png';
$arr=explode('.', $file);
echo $arr[count($arr)-1];
4.$file = 'x.y.z.png';
$arr=explode('.', $file);
echo end($arr); //end()返回数组的最后一个元素
5.$file = 'x.y.z.png';
echo strrev(explode('.', strrev($file))[0]);
6.$file = 'x.y.z.png';
echo pathinfo($file)['extension'];
解析:pathinfo() 函数以数组的形式返回文件路径的信息。包括以下的数组元素:
[dirname]
[basename]
[extension]
7.$file = 'x.y.z.png';
echo pathinfo($file, PATHINFO_EXTENSION);
总结:字符串截取2种,数组分割3种,路径函数2种查看全部 -
strtolower()转换为小写;
end()输出数组中的当前元素和最后一个元素的值;
截取文件扩展名的方法很多;这里有两种:strtolower(end(explode(".",$filename)));以及
strtolower(pathinfo($filename,PATHINFO_EXTENSION));查看全部 -
php.ini 配置对php上传文件大小的影响参数有:
配置项 可能值 功能描述
file_uploads ON 确定服务器上的PHP脚本是否可以接受HTTP文件上传
memory_limit 8M 设置脚本可以分配的最大内存量,防止失控的脚本独占服务器内存
upload_max_filesize 2M 限制PHP处理上传文件的最大值,此值必须小于post_max_size值
post_max_size 8M 限制通过POST方法可以接受的信息最大量查看全部 -
文件上传:判断文件是否通过HTTP POST方式上传的 因为move_uploaded_file()函数只能通过HTTP POST方式上传上来的文件;//在这里检测的是临时文件哈 //move_uploaded_file()函数移动的也是临时文件
查看全部 -
文件上传中:
关于上传大小,总共有三个地方的限制;
一个是PHP.ini中的upload_max_fielsize的大小,限制上传过程中单个文件的大小,默认值2M;(服务器端的配置)第二个是PHP.ini中的post_max_size的大小,限制表单以POST的方式发送过程中单次发送的大小,默认8M;(服务器端的配置)
第三个是MAX_FILE_SIZE是在form表单中(HTML代码里设置)<input type="hidden" name="MAX_FILE_SIZE" value="173255" />;(客户端的配置)
MAX_FILE_SIZE是在html代码里,是在客户端限制、监督、提示用户上传文件的大小是否合格的,其值得大小取决于服务器端PHP.ini中upload_max_fielsize(限制单个文件)的大小;因为PHP程序是无法判断用户本 地文件大小的。所以等到我们的PHP来判断文件大小的时候,那个文件其实已经上传到服务器了。这时候再判断超过限制了,不允许上传。可就有点马后炮了,所以MAX_FILE_SIZE是在用户将文件上传之前就判断将要上传的文件是否超过限制,超限制,则不允许用户上传;
这几个限制都可以在代码里设置大小;写在代码里单位是字节;
一般内存换算是1024进制,也就是2的10次方。 1TB=1024GB 1GB=1024MB 1MB=1024KB 1KB=1024Byte
其中,在设置的时候,post_max_size的值一定要大于upload_max_fielsize的值,因为表单一次提交可能是好几个<input>框,意思是单次提交可能是好几个文件;
另外如果启用了内存限制,那么post_max_size的值应该小于memory_limit的值,参数是脚本运行最大的消耗内存,memory_limit 默认8M 是设置脚本可以分配的最大内存量,防止失控的脚本独占服务器内存 ;
文件上传的其他注意事项
在上传大文件时,你会有上传速度慢的感觉,当超过一定的时间,会报脚本执行超过30秒的错误,这是因为在php.ini配置文件中max_execution_time配置选项在作怪,其表示每个脚本最大允许执行时间(秒),0 表示没有限制。你可以适当调整max_execution_time的值,不推荐设定为0。还有一个参数是max_input_time,每个脚本可以消耗的时间,可以了解一下;
查看全部 -
文件上传:错误号对应的原因
查看全部 -
文件上传:错误号对应的原因
查看全部
举报