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 相关文章推荐
dede3.1分页文字采集过滤规则详说(图文教程)续二
Apr 03 PHP
Zend Framework中的简单工厂模式 图文
Jul 10 PHP
PHP输出XML到页面的3种方法详解
Jun 06 PHP
PHP连接MySQL查询结果中文显示乱码解决方法
Oct 25 PHP
五款PHP代码重构工具推荐
Oct 14 PHP
php中in_array函数用法分析
Nov 15 PHP
PHP正则验证Email的方法
Jun 15 PHP
php根据一个给定范围和步进生成数组的方法
Jun 19 PHP
PHP数据库表操作的封装类及用法实例详解
Jul 12 PHP
PHP自定义序列化接口Serializable用法分析
Dec 29 PHP
Thinkphp自定义生成缩略图尺寸的方法
Aug 05 PHP
PHP简单实现图片格式转换(jpg转png,gif转png等)
Oct 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调用Word组件DCOM权限的问题
2017/12/27 PHP
jQuery 隔行换色 支持键盘上下键,按Enter选定值
2009/08/02 Javascript
prototype与jquery下Ajax实现的差别
2009/09/13 Javascript
javascript 数组学习资料收集
2010/04/11 Javascript
boxy基于jquery的弹出层对话框插件扩展应用 弹出层选择器
2010/11/21 Javascript
JS文本框默认值处理详解
2013/07/10 Javascript
jquery validate在ie8下的bug解决方法
2013/11/13 Javascript
js判断url是否有效的两种方法
2014/03/04 Javascript
JQUERY简单按钮轮换选中效果实现方法
2015/05/07 Javascript
浅谈Node.js中的定时器
2015/06/18 Javascript
jquery实现带缩略图的全屏图片画廊效果实例
2015/06/25 Javascript
纯javascript判断查询日期是否为有效日期
2015/08/24 Javascript
jQuery实现在HTML文档加载完毕后自动执行某个事件的方法
2017/05/08 jQuery
vue中用H5实现文件上传的方法实例代码
2017/05/27 Javascript
Angular2里获取(input file)上传文件的内容的方法
2017/09/05 Javascript
vue项目中使用tinymce编辑器的步骤详解
2018/09/11 Javascript
JavaScript定时器设置、使用与倒计时案例详解
2019/07/08 Javascript
Javascript实现单选框效果
2020/12/09 Javascript
Python3.6.x中内置函数总结及讲解
2019/02/22 Python
Python实现打砖块小游戏代码实例
2019/05/18 Python
Python_查看sqlite3表结构,查询语句的示例代码
2019/07/17 Python
python字典的常用方法总结
2019/07/31 Python
Python 利用Entrez库筛选下载PubMed文献摘要的示例
2020/11/24 Python
使用Python实现音频双通道分离
2020/12/25 Python
Python读取ini配置文件传参的简单示例
2021/01/05 Python
CSS3中box-shadow的用法介绍
2015/07/15 HTML / CSS
5分钟实现Canvas鼠标跟随动画背景
2019/11/18 HTML / CSS
西班牙土拨鼠床垫公司,感觉在云端:Marmota
2019/03/18 全球购物
Perfume’s Club英国官网:购买香水和护肤品
2019/11/02 全球购物
英国拖鞋购买网站:Bedroom Athletics
2020/02/28 全球购物
如何启动时不需输入用户名与密码
2014/05/09 面试题
毕业生求职找工作的自我评价范文
2013/11/27 职场文书
在校生自我鉴定
2014/01/23 职场文书
后勤主管岗位职责
2014/03/01 职场文书
维稳承诺书
2015/01/20 职场文书
大学生入党自我鉴定范文
2019/06/21 职场文书