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 相关文章推荐
二进制交叉权限微型php类分享
Feb 07 PHP
CodeIgniter输出中文乱码的两种解决办法
Jun 12 PHP
PHP获取时间排除周六、周日的两个方法
Jun 30 PHP
基于php的CMS中展示文章类实例分析
Jun 18 PHP
如何把php5.3版本升级到php5.4或者php5.5
Jul 31 PHP
WordPress中获取所使用的模板的页面ID的简单方法
Dec 31 PHP
基于PHP实现简单的随机抽奖小程序
Jan 05 PHP
php制作的简单验证码识别代码
Jan 26 PHP
深入理解PHP之OpCode原理详解
Jun 01 PHP
PHP编写文件多服务器同步程序
Jul 02 PHP
Thinkphp5.0 框架视图view的比较标签用法分析
Oct 12 PHP
TP5(thinkPHP5)框架使用ajax实现与后台数据交互的方法小结
Feb 10 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
WindowsXP中快速配置Apache+PHP5+Mysql
2008/06/05 PHP
简单的方法让你的后台登录更加安全(php中加session验证)
2012/08/22 PHP
php求数组全排列,元素所有组合的方法
2016/05/05 PHP
Javascript 遍历对象中的子对象
2009/07/03 Javascript
js 格式化时间日期函数小结
2010/03/20 Javascript
jQuery数据显示插件整合实现代码
2011/10/24 Javascript
jQuery中append()方法用法实例
2015/01/08 Javascript
Jquery promise实现一张一张加载图片
2015/11/13 Javascript
jQuery插件实现无缝滚动特效
2015/11/24 Javascript
vue2.0 axios前后端数据处理实例代码
2017/06/30 Javascript
微信小程序 转发功能的实现
2017/08/04 Javascript
Angular弹出模态框的两种方式
2017/10/19 Javascript
vue2.x+webpack快速搭建前端项目框架详解
2017/11/30 Javascript
jQuery实现input输入框获取焦点与失去焦点时提示的消失与显示功能示例
2019/05/27 jQuery
JavaScript enum枚举类型定义及使用方法
2020/05/15 Javascript
代码块高亮可复制显示js插件highlight.js+clipboard.js整合
2021/02/15 Javascript
[01:10]3.19DOTA2发布会 三代刀塔人第一代
2014/03/25 DOTA
Python求两个文本文件以行为单位的交集、并集与差集的方法
2015/06/17 Python
Windows 7下Python Web环境搭建图文教程
2018/03/20 Python
mvc框架打造笔记之wsgi协议的优缺点以及接口实现
2018/08/01 Python
pygame游戏之旅 创建游戏窗口界面
2018/11/20 Python
python解析xml简单示例
2019/06/21 Python
Python创建空列表的字典2种方法详解
2020/02/13 Python
css3实现背景颜色渐变让图片不再是唯一的实现方式
2012/12/18 HTML / CSS
HTML5之SVG 2D入门5—颜色的表示及定义方式
2013/01/30 HTML / CSS
Daniel Wellington官方海外旗舰店:丹尼尔惠灵顿DW手表
2018/02/22 全球购物
豪华床上用品 :Jennifer Adams
2019/09/15 全球购物
结婚喜宴家长答谢词
2014/01/15 职场文书
2014年学雷锋活动总结
2014/06/26 职场文书
派出所副所长四风问题个人整改措施思想汇报
2014/10/13 职场文书
涨价通知
2015/04/23 职场文书
2015年机关党建工作总结
2015/05/22 职场文书
2015年成本会计工作总结
2015/10/14 职场文书
Python 详解通过Scrapy框架实现爬取CSDN全站热榜标题热词流程
2021/11/11 Python
深入浅出的讲解:信号调制到底是如何实现的
2022/02/18 无线电
微信小程序 WeUI扩展组件库的入门教程
2022/04/21 Javascript