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 相关文章推荐
综合图片计数器
Oct 09 PHP
PHP转换IP地址到真实地址的方法详解
Jun 09 PHP
php+mysqli使用面向对象方式更新数据库实例
Jan 29 PHP
PHP不使用递归的无限级分类简单实例
Nov 05 PHP
PHP实现多级分类生成树的方法示例
Feb 07 PHP
php使用PDO下exec()函数查询执行后受影响行数的方法
Mar 28 PHP
详解php中serialize()和unserialize()函数
Jul 08 PHP
ThinkPHP防止重复提交表单的方法实例分析
May 10 PHP
Yii1.1框架实现PHP极光推送消息通知功能
Sep 06 PHP
PHP Swoole异步Redis客户端实现方法示例
Oct 24 PHP
PHP预定义接口――Iterator用法示例
Jun 05 PHP
ThinkPHP5.1的权限控制怎么写?分享一个AUTH权限控制
Mar 09 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支持页面回退的两种方法[转]
2007/02/14 PHP
mac下安装nginx和php
2013/11/04 PHP
PHP数组操作――获取数组最后一个值的方法
2015/04/14 PHP
WordPress中限制非管理员用户在文章后只能评论一次
2015/12/31 PHP
php+mysql实现简单登录注册修改密码网页
2016/11/30 PHP
thinkPHP线上自动加载异常与修复方法实例分析
2016/12/01 PHP
PHP的PDO错误与错误处理
2019/01/27 PHP
JS限制Textarea文本域字符个数的具体实现
2013/08/02 Javascript
分享20个提升网站界面体验的jQuery插件
2014/12/15 Javascript
jquery中toggle函数交替使用问题
2015/06/22 Javascript
js中最容易被忽视的事件问题大总结
2016/05/15 Javascript
功能强大的jquery.validate表单验证插件
2016/11/07 Javascript
详解堆的javascript实现方法
2016/11/29 Javascript
AngularJS实现的输入框字数限制提醒功能示例
2017/10/26 Javascript
jQuery实现百度图片移入移出内容提示框上下左右移动的效果
2018/06/05 jQuery
详解webpack-dev-middleware 源码解读
2020/03/23 Javascript
Vue3为什么这么快
2020/09/23 Javascript
vue实现lodop打印功能的示例
2020/11/11 Javascript
[01:04:14]OG vs Winstrike 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
Python中字典的浅拷贝与深拷贝用法实例分析
2018/01/02 Python
深入理解Django-Signals信号量
2019/02/19 Python
pycharm实现猜数游戏
2020/12/07 Python
python可视化分析的实现(matplotlib、seaborn、ggplot2)
2021/02/03 Python
Python 转移文件至云对象存储的方法
2021/02/07 Python
CSS3毛玻璃效果(blur)有白边问题的解决方法
2016/11/15 HTML / CSS
澳大利亚美容产品及化妆品在线:Activeskin
2020/06/03 全球购物
Java如何获得ResultSet的总行数
2016/09/03 面试题
项目开发计划书
2014/01/09 职场文书
周年庆典主持词
2014/04/02 职场文书
护士节演讲稿开场白
2014/08/25 职场文书
2014年人事科工作总结
2014/11/19 职场文书
2014年大班保育员工作总结
2014/12/02 职场文书
品质保证书格式
2015/02/28 职场文书
毕业生登记表班级意见
2015/06/05 职场文书
工资证明格式模板
2015/06/12 职场文书
Win11如何启用启动修复 ? Win11执行启动修复的三种方法
2022/04/08 数码科技