php 实现图片上传并进行替换操作
首先建立两个文件: change.html 和 change.php
change.html 文件的表单代码如下:
文件:
这里有几个要注意的地方, 首先看这句
, 这里我们采用 POST 方法, 个别浏览器还支持 PUT 方法, 当然这需要对脚本进行修改, 我并不建议这么做表单中必须设置 enctype="multipart/form-data, 这样, 服务器就知道上传文件带有常规表单信息, 记住, 这个是必须设置的此外还需要一个隐藏域来限制上传文件的最大长度:, 这里 name 必须设置成 MAX_FILE_SIZE, 其值就是上传文件的最大长度, 单位是 B, 这里我限制成 2M 再看这句:,type="file" 说明了文件类型, 这样一个基本的上传文件接口就完成了, 接下来讲讲如何用 PHP 来处理上传的文件, 此外你的 php.ini 中设置的上传文件最大长度可能会影响到你的实际上传, 请根据实际情况修改, 另 PHP 的上传是先传到临时目录, 在移至指定目录的, 了; 临时目录的可根据需要修改, 也可使用默认值
以下为表单提交 change.php 文件代码, 来看看这个文件都有什么:<?php
header("content-type:text/html;charset=utf-8");
/**
* @param string $oldfile 需要更换的文件名 (包含具体路径名)
*/
functionchangeFile($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"您的文件已经上传完毕 上传图片预览:";
}
}else{
echo"上传失败, 文件大于 2M, 请重新上传!";
}
}else{
$text=implode(",",$type);
echo"您只能上传以下类型文件:",$text,"
";
// echo "scriptalert('您只能上传以下类型文件:$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, 也可以直接访问, 但这是不安全的看刚才那个上传接口 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-- 将上传文件移至指定目录成功上传, 我们就输出预览, 否则输出上传失败
来源: https://www.php1.cn/detail/php-d5066f7ce0.html