php实现图片上传并进行替换操作


Posted in PHP onMarch 15, 2016

首先建立两个文件: change.html 和 change.php

change.html 文件的表单代码如下:

<html>
<head>
<title>change file example.</title>
<meta charset="UTF-8">
</head>
<body>
<form method="post" action="changefile.php" enctype="multipart/form-data">
<table border=0 cellspacing=0 cellpadding=0 align=center width="100%">
<tr>
<td width=55 height=20 align="center">
<input type="hidden" name="MAX_FILE_SIZE" value="2000000" />
文件:
</td>
<td>
<input name="file" type="file" />
<input type="submit" name="submit" value="submit" /> 
</td>
</tr>
</table>
</form>
</body>
</html>

这里有几个要注意的地方,首先看这句<form method="post" action="change.php" enctype="multipart/form-data">,这里我们采用POST方法,个别浏览器还支持PUT方法,当然这需要对脚本进行修改,我并不建议这么做。表单中必须设置enctype="multipart/form-data,这样,服务器就知道上传文件带有常规表单信息,记住,这个是必须设置的。此外还需要一个隐藏域来限制上传文件的最大长度:<input type="hidden" name="MAX_FILE_SIZE" value="2000000">,这里name必须设置成MAX_FILE_SIZE,其值就是上传文件的最大长度,单位是B,这里我限制成2M。再看这句:<input name="file" type="file"   value="浏览" >,type="file"说明了文件类型,这样一个基本的上传文件接口就完成了,接下来讲讲如何用PHP来处理上传的文件,此外你的php.ini中设置的上传文件最大长度可能会影响到你的实际上传,请根据实际情况修改,另PHP的上传是先传到临时目录,在移至指定目录的,了;临时目录的可根据需要修改,也可使用默认值……

以下为表单提交change.php文件代码,来看看这个文件都有什么:

<?php
header("content-type:text/html;charset=utf-8");

 

/**
* @param string $oldfile 需要更换的文件名(包含具体路径名)
*/
function changeFile($oldfile){
$newfile = $_FILES['file']['name'];//获取上传文件名
$fileclass = substr(strrchr($newfile, '.'), 1);//获取上传文件扩展名,做判断用
$type = array("jpg", "gif", "bmp", "jpeg", "png");//设置允许上传文件的类型
if(in_array(strtolower($fileclass), $type)){
if(file_exists($oldfile)){
unlink($oldfile);
}

if(is_uploaded_file($_FILES['file']['tmp_name'])){//必须通过 PHP 的 HTTP POST 上传机制所上传的 
if(move_uploaded_file($_FILES['file']['tmp_name'], $oldfile)){ 
//输出图片预览
echo "<center>您的文件已经上传完毕 上传图片预览: </center><br><center><img src='$oldfile'></center>";
}
}else{
echo "<center>上传失败,文件大于2M,请重新上传!</center>";
}
}else{
$text = implode(",", $type);
echo "<center>您只能上传以下类型文件:", $text, "</center><br>";
// echo "<script>alert('您只能上传以下类型文件:$text')</script>";
}
}

changeFile("./files/1.png");

刚看这些你可能有点晕~~,慢慢看,你就会发现其实这玩意SO EASY!!先讲下原理,该程序以上传图片为例,先判断文件类型是否为图片格式,若是则上传文件,接着上传文件到并替换指定文件,成功上传则输出上传的图片预览。这里要对程序中一些函数作些解释。先看substr(strrchr($newfile, '.'), 1), strrchar()函数有什么作用呢,我举个例子大家就知道,比如一个图片文件 pic.jpg,我们用 strrchar()处理,strrchr(pic.jpg,'.'),它将返回.jpg,明白了吗?该函数返回指定字符在该字符串最后出现的位置后的字符串。配合 substr() 我们就可以取到jpg,这样我们就得到了文件的后缀名,来判断上传文件是否符合指定格式。本程序把指定的格式放在一个数组中,实际使用时可根据需要添加。
接着,我们调用判断文件类型的函数,并将其转化为小写strtolower($_FILES['file']['name']),这里有个很关键的东东$_FILES ,这是个超级全局数组,保存了需要处理的表单数据,如果开启了register_globals,也可以直接访问,但这是不安全的。看刚才那个上传接口<input name="file" type="file">,根据这个表单名称,我们可以得到很多信息:
$_FILES['file']['name']--   得到文件名称
$_FILES['file']['tmp_name']--得到临时存储位置
$_FILES['file']['size']--得到文件大小
$_FILES['file']['type']--得到文件MIME类型
得到这些信息,就可以轻松判断文件的信息了,是不是很方便?^_^,接下来还有一些函数需要了解,file_exists()--判断指定目录是否存在,不存在我们当然不能上传(好像是废话!),is_uploaded_file--判断文件是否已经通过HTTP POST上传,move_uploaded_file--将上传文件移至指定目录。成功上传,我们就输出预览,否则输出上传失败……

内容很详细,过程也记录下来供大家仔细研究,希望对大家的学习有所帮助。

PHP 相关文章推荐
利用 window_onload 实现select默认选择
Oct 09 PHP
使用迭代器 遍历文件信息的详解
Jun 08 PHP
解析PHP对现有搜索引擎的调用
Jun 25 PHP
PHP获取当前日期和时间及格式化方法参数
May 11 PHP
33道php常见面试题及答案
Jul 06 PHP
简单谈谈PHP vs Node.js
Jul 17 PHP
PHP浮点比较大小的方法
Feb 14 PHP
php实现简单的权限管理的示例代码
Aug 25 PHP
Thinkphp5.0框架使用模型Model的获取器、修改器、软删除数据操作示例
Oct 11 PHP
PHP实现笛卡尔积算法的实例讲解
Dec 22 PHP
laravel框架select2多选插件初始化默认选中项操作示例
Feb 18 PHP
Yii实现微信公众号场景二维码的方法实例
Aug 30 PHP
php模板引擎技术简单实现
Mar 15 #PHP
9个比较实用的php代码片段
Mar 15 #PHP
Laravel使用Caching缓存数据减轻数据库查询压力的方法
Mar 15 #PHP
php图片添加文字水印实现代码
Mar 15 #PHP
PHP闭包函数传参及使用外部变量的方法
Mar 15 #PHP
Yii rules常用规则示例
Mar 15 #PHP
基于laravel制作APP接口(API)
Mar 15 #PHP
You might like
PHP将数据导出Excel表中的实例(投机型)
2017/07/31 PHP
PHP封装curl的调用接口及常用函数详解
2018/05/31 PHP
ThinkPHP中获取指定日期后工作日的具体日期方法
2018/10/14 PHP
PHP使用SOAP调用API操作示例
2018/12/25 PHP
详解PHP 7.4 中数组延展操作符语法知识点
2019/07/19 PHP
PHP实现微信提现功能(微信商城)
2019/11/21 PHP
JS使用ajax从xml文件动态获取数据显示的方法
2015/03/24 Javascript
jquery动态导航插件dynamicNav用法实例分析
2015/09/06 Javascript
基于jquery实现鼠标左右拖动滑块滑动附源码下载
2015/12/23 Javascript
jQuery EasyUI 入门必看
2016/06/03 Javascript
js监听键盘事件的方法_原生和jquery的区别详解
2016/10/10 Javascript
JS扩展类,克隆对象与混合类实例分析
2016/11/26 Javascript
Redux实现组合计数器的示例代码
2018/07/04 Javascript
实现vuex原理的示例
2020/10/21 Javascript
[01:02:34]TFT vs VGJ.T Supermajor 败者组 BO3 第二场 6.5
2018/06/06 DOTA
Python中的深拷贝和浅拷贝详解
2015/06/03 Python
Python中if __name__ == '__main__'作用解析
2015/06/29 Python
深入理解Python变量与常量
2016/06/02 Python
Python实现矩阵转置的方法分析
2017/11/24 Python
python学生信息管理系统
2018/03/13 Python
python 将json数据提取转化为txt的方法
2018/10/26 Python
python中添加模块导入路径的方法
2021/02/03 Python
用HTML5实现网站在windows8中贴靠的方法
2013/04/21 HTML / CSS
美国最大的宠物药店:1-800-PetMeds
2016/10/02 全球购物
DataReader和DataSet的异同
2014/12/31 面试题
计算机数据库专业职业生涯规划书
2014/02/08 职场文书
根叔历年演讲稿
2014/05/20 职场文书
让世界充满爱演讲稿
2014/05/24 职场文书
普通党员个人整改措施
2014/10/27 职场文书
2015年学习部工作总结范文
2015/03/31 职场文书
2015教师年度思想工作总结
2015/04/30 职场文书
工作年限证明模板
2015/06/15 职场文书
2015初中生物教研组工作总结
2015/07/21 职场文书
webpack的移动端适配方案小结
2021/07/25 Javascript
Android自定义ScrollView实现阻尼回弹
2022/04/01 Java/Android
win11无线投屏在哪设置? win11无线投屏功能的使用方法
2022/04/08 数码科技