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 图片上添加透明度渐变的效果
Jun 29 PHP
浅谈PHP 闭包特性在实际应用中的问题
Oct 30 PHP
PHP在字符断点处截断文字的实现代码
Apr 21 PHP
使用 PHPMAILER 发送邮件实例应用
Nov 07 PHP
ThinkPHP利用PHPMailer实现邮件发送实现代码
Sep 26 PHP
PHP的构造方法,析构方法和this关键字详细介绍
Oct 22 PHP
MongoDB在PHP中的常用操作小结
Feb 20 PHP
yii框架表单模型使用及以数组形式提交表单数据示例
Apr 30 PHP
Thinkphp开发--集成极光推送
Sep 15 PHP
Laravel中使用Queue的最基本操作教程
Dec 27 PHP
PHP简单实现正则匹配省市区的方法
Apr 13 PHP
浅谈laravel框架与thinkPHP框架的区别
Oct 23 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/09/24 PHP
php curl模拟post提交数据示例
2013/12/31 PHP
PHP编写学校网站上新生注册登陆程序的实例分享
2016/03/21 PHP
PHP时间戳格式全部汇总 (获取时间、时间戳)
2016/06/13 PHP
PHP-FPM运行状态的实时查看及监控详解
2016/11/18 PHP
php根据用户名和手机号查询是否存在手机号码
2017/02/16 PHP
PHP Socket网络操作类定义与用法示例
2017/08/30 PHP
Laravel框架创建路由的方法详解
2019/09/04 PHP
js parsefloat parseint 转换函数
2010/01/21 Javascript
javascript检测浏览器flash版本的实现代码
2011/12/06 Javascript
用js代码改变单选框选中状态的简单实例
2013/12/18 Javascript
JS弹出层单纯的绝对定位居中示例代码
2014/02/18 Javascript
javasciprt下jquery函数$.post执行无响应的解决方法
2014/03/13 Javascript
jQuery选择器之基本选择器与层次选择器
2015/03/03 Javascript
jQuery实现点击表格单元格就可以编辑内容的方法【测试可用】
2016/08/01 Javascript
node使用UEditor富文本编辑器的方法实例
2017/07/11 Javascript
vue2实现搜索结果中的搜索关键字高亮的代码
2018/08/29 Javascript
用WebStorm进行Angularjs 2开发(环境篇:Windows 10,Angular-cli方式)
2018/12/05 Javascript
JavaScript如何获取一个元素的样式信息
2019/07/29 Javascript
vue-next/runtime-core 源码阅读指南详解
2019/10/25 Javascript
vue实现学生信息管理系统
2020/05/30 Javascript
vue+element-ui表格封装tag标签使用插槽
2020/06/18 Javascript
[46:10]2014 DOTA2国际邀请赛中国区预选赛 CnB VS HGT
2014/05/21 DOTA
Python使用htpasswd实现基本认证授权的例子
2014/06/10 Python
今天 平安夜 Python 送你一顶圣诞帽 @微信官方
2017/12/25 Python
对pandas中Series的map函数详解
2018/07/25 Python
基于Python+Appium实现京东双十一自动领金币功能
2019/10/31 Python
Python爬虫之Selenium中frame/iframe表单嵌套页面
2020/12/04 Python
比利时网上药店: Drogisterij.net
2017/03/17 全球购物
美国销售第一的智能手机和平板电脑保护壳:OtterBox
2017/12/21 全球购物
Myprotein中国网站:欧洲畅销运动营养品牌
2021/02/11 全球购物
土木工程实习生自我鉴定
2013/09/19 职场文书
解除劳动关系协议书范文
2014/09/11 职场文书
房屋产权共有协议书范本
2014/11/03 职场文书
Python基于Tkinter开发一个爬取B站直播弹幕的工具
2021/05/06 Python
win10壁纸在哪个文件夹 win10桌面背景图片文件位置分享
2022/08/05 数码科技