PHP上传图片例子  源码下载

两个文件:

tu.php

upload.php

 

tu.php 代码:

 <?php
ini_set("display_errors", "On");
error_reporting(E_ALL | E_STRICT);
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>上传图片</title>
</head> <body>
<h1>上传图片</h1> <div id="divPreview">
<img id="imgHeadPhoto" src="noperson.jpg" style="width: 160px; height: 170px; border: solid 1px #d2e2e2;"
alt="" />
</div>
<!--enctype 属性规定在发送到服务器之前应该如何对表单数据进行编码,"multipart/form-data"在使用包含文件上传控件的表单时,必须使用该值。-->
<form action="upload.php" method="post" enctype="multipart/form-data">
<!--file定义输入字段和 "浏览"按钮,供文件上传。-->
<input type="file" name="file" onchange="PreviewImage(this,'imgHeadPhoto','divPreview');" size="20" />
<input type="submit" value="上传"/> </form> <div>
<?php
$page=isset($_GET['page'])?$_GET['page']:0;//从零开始
$imgnums = 5; //每页显示的图片数
$path="./img/"; //图片保存的目录
$handle = opendir($path);
$i=0;
while (false !== ($file = readdir($handle))) {
list($filesname,$ext)=explode(".",$file);
if($ext=="gif" or $ext=="jpg" or $ext=="JPG" or $ext=="png" ) {
if (!is_dir('./'.$file)) {
$array[]=$file;//保存图片名称
++$i;
} } } if($array){
rsort($array);//修改日期倒序排序
} for($j=$imgnums*$page; $j<($imgnums*$page+$imgnums)&&$j<$i; ++$j){
echo '<div>';
echo $array[$j].'<br />';
$img_info = getimagesize($path.$array[$j]);
echo $img_info[0].'<br />';
if ($img_info[0]>180){//图片宽度大于180像素的,以宽180显示,高以等比例缩小,宽小于180像素的图片,不作任何改变
echo "<img src=".$path.$array[$j]." width='180' height='".($img_info[1]*(180/$img_info[0]))."'><br />";
}else{
echo "<img src=".$path.$array[$j]." ><br />"; }
echo '</div>';
} $realpage = @ceil($i / $imgnums) - 1;
$Prepage = $page-1;
$Nextpage = $page+1;
if($Prepage<0){
echo "上一页 ";
echo "<a href=?page=$Nextpage>下一页</a> ";
echo "<a href=?page=$realpage>最末页</a> ";
}elseif($Nextpage >= $realpage){
echo "<a href=?page=0>首页</a> ";
echo " <a href=?page=$Prepage>上一页</a> ";
echo " 下一页";
}else{
echo "<a href=?page=0>首页</a> ";
echo "<a href=?page=$Prepage>上一页</a> ";
echo "<a href=?page=$Nextpage>下一页</a> ";
echo "<a href=?page=$realpage>最末页</a> ";
} ?> </div>
</body>
<script type="text/javascript">
//js本地图片预览,兼容ie[6-9]、火狐、Chrome17+、Opera11+、Maxthon3
function PreviewImage(fileObj, imgPreviewId, divPreviewId) {
var allowExtention = ".jpg,.bmp,.gif,.png"; //允许上传文件的后缀名document.getElementById("hfAllowPicSuffix").value;
var extention = fileObj.value.substring(fileObj.value.lastIndexOf(".") + 1).toLowerCase();
var browserVersion = window.navigator.userAgent.toUpperCase();
if (allowExtention.indexOf(extention) > -1) {
if (fileObj.files) {//HTML5实现预览,兼容chrome、火狐7+等
if (window.FileReader) {
var reader = new FileReader();
reader.onload = function (e) {
document.getElementById(imgPreviewId).setAttribute("src", e.target.result);
}
reader.readAsDataURL(fileObj.files[0]);
} else if (browserVersion.indexOf("SAFARI") > -1) {
alert("不支持Safari6.0以下浏览器的图片预览!");
}
} else if (browserVersion.indexOf("MSIE") > -1) {
if (browserVersion.indexOf("MSIE 6") > -1) {//ie6
document.getElementById(imgPreviewId).setAttribute("src", fileObj.value);
} else {//ie[7-9]
fileObj.select();
if (browserVersion.indexOf("MSIE 9") > -1)
fileObj.blur(); //不加上document.selection.createRange().text在ie9会拒绝访问
var newPreview = document.getElementById(divPreviewId + "New");
if (newPreview == null) {
newPreview = document.createElement("div");
newPreview.setAttribute("id", divPreviewId + "New");
newPreview.style.width = document.getElementById(imgPreviewId).width + "px";
newPreview.style.height = document.getElementById(imgPreviewId).height + "px";
newPreview.style.border = "solid 1px #d2e2e2";
}
newPreview.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod='scale',src='" + document.selection.createRange().text + "')";
var tempDivPreview = document.getElementById(divPreviewId);
tempDivPreview.parentNode.insertBefore(newPreview, tempDivPreview);
tempDivPreview.style.display = "none";
}
} else if (browserVersion.indexOf("FIREFOX") > -1) {//firefox
var firefoxVersion = parseFloat(browserVersion.toLowerCase().match(/firefox\/([\d.]+)/)[1]);
if (firefoxVersion < 7) {//firefox7以下版本
document.getElementById(imgPreviewId).setAttribute("src", fileObj.files[0].getAsDataURL());
} else {//firefox7.0+
document.getElementById(imgPreviewId).setAttribute("src", window.URL.createObjectURL(fileObj.files[0]));
}
} else {
document.getElementById(imgPreviewId).setAttribute("src", fileObj.value);
}
} else {
alert("仅支持" + allowExtention + "为后缀名的文件!");
fileObj.value = ""; //清空选中文件
if (browserVersion.indexOf("MSIE") > -1) {
fileObj.select();
document.selection.clear();
}
fileObj.outerHTML = fileObj.outerHTML;
}
return fileObj.value; //返回路径
}
</script>
</html>

upload.php源码:

 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>上传处理文件</title>
</head> <body>
<?php $gotopage="tu.php";
//var_dump($_FILES["file"]);
//array(5) { ["name"]=> string(17) "56e79ea2e1418.jpg" ["type"]=> string(10) "image/jpeg" ["tmp_name"]=> string(43) "C:\Users\asus\AppData\Local\Temp\phpD07.tmp" ["error"]=> int(0) ["size"]=> int(454445) }
//1.限制文件的类型,防止注入php或其他文件,提升安全
//2.限制文件的大小,减少内存压力
//3.防止文件名重复,提升用户体验
//方法一: 修改文件名 一般为:时间戳+随机数+用户名
// 方法二:建文件夹 //4.保存文件 //判断上传的文件是否出错,是的话,返回错误
if($_FILES["file"]["error"])
{
//echo $_FILES["file"]["error"];
header("refresh:10;url=".$gotopage);
print('上传出错,错误代码:'.$_FILES["file"]["error"].',请稍等...<br>10秒后自动跳转。');
echo "<br /><br /><br />";
switch ($_FILES["file"]["error"])
{
case 1:
echo "上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值。";
break;
case 2:
echo "上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定";
break;
case 3:
echo "文件只有部分被上传。 ";
break;
case 4:
echo "没有文件被上传。 ";
break;
case 5:
echo "上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定";
break;
case 6:
echo "找不到临时文件夹。PHP 4.3.10 和 PHP 5.0.3 引进。";
break;
case 7:
echo "文件写入失败。PHP 5.1.0 引进。";
break; } echo "<br /><br /><br />
错误代码解析<br />
UPLOAD_ERR_OK:其值为 0,没有错误发生,文件上传成功。<br />
UPLOAD_ERR_INI_SIZE: 其值为 1,上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值。<br />
UPLOAD_ERR_FORM_SIZE:其值为 2,上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定<br />
UPLOAD_ERR_PARTIAL:其值为 3,文件只有部分被上传。 <br />
UPLOAD_ERR_EXTENSION:其值为 4,没有文件被上传。 <br />
UPLOAD_ERR_NO_TMP_DIR: 其值为 6,找不到临时文件夹。PHP 4.3.10 和 PHP 5.0.3 引进。<br />
UPLOAD_ERR_CANT_WRITE:其值为 7,文件写入失败。PHP 5.1.0 引进。<br />
"; }
else
{ echo "Upload: " . $_FILES["file"]["name"] . "<br />";
echo "Type: " . $_FILES["file"]["type"] . "<br />";
echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
echo "Stored in: " . $_FILES["file"]["tmp_name"]. "<br /><br /><br />"; //没有出错
//加限制条件
//判断上传文件类型为png或jpg且大小不超过10240000B(10M)
if(($_FILES["file"]["type"]=="image/png"||$_FILES["file"]["type"]=="image/gif"||$_FILES["file"]["type"]=="image/jpeg")&&$_FILES["file"]["size"]<10240000)
{
//防止文件名重复
$filename ="./img/".time()."_".$_FILES["file"]["name"];
//转码,把utf-8转成gb2312,返回转换后的字符串, 或者在失败时返回 FALSE。
$filename =iconv("UTF-8","gb2312",$filename);
//检查文件或目录是否存在
if(file_exists($filename))
{
echo"该文件已存在";
}
else
{
//保存文件, move_uploaded_file 将上传的文件移动到新位置
move_uploaded_file($_FILES["file"]["tmp_name"],$filename);//将临时地址移动到指定地址
header("refresh:5;url=".$gotopage); print('上传成功,请稍等...<br>五秒后自动跳转。');
}
}
else
{
//echo"文件类型不对";
header("refresh:5;url=".$gotopage); print('上传失败,你上传的不是图片,请稍等...<br>五秒后自动跳转。');
}
}
?>
</body>
</html>

PHP上传图片例子的更多相关文章

  1. jquery mobile上传图片完整例子(包含ios图片横向问题处理和C#后台图片压缩)

    上传图片本身是个基本的小功能,但是到了移动端就不那么简单了,相信找到这篇文章的你一定有深深的同感. 本文实例是:在(移动端)页面中点击图片,然后选择文件,然后保存.使用Asp.net 难点一:后台获取 ...

  2. nodejs上传图片并显示的例子

    目标 1. 在浏览器地址栏输入“http://demos/start”,进入欢迎页面,页面有一个文件上传表单: 2. 选择一张图片并提交表单,文件被上传到"http://demos/uplo ...

  3. 用SWFUpload上传图片小例子

    在开发项目中,经常会用到上传图片,接下来我就用一种简单的方式给大家分享一下使用SWFUpload的方式上传图片. 1.在网站根目录下新建一个SWFUpload文件夹,把下载的组建放在SWFUpload ...

  4. 使用Uploadify实现上传图片生成缩略图例子,实时显示进度条

    不了解Uploadify的,先看看前一篇详细说明 http://www.cnblogs.com/XuebinDing/archive/2012/04/26/2470995.html Uploadify ...

  5. javaweb中上传图片并显示图片,用我要上传课程信息(里面包括照片)这个例子说明

    原理:  从客户端上传到服务器                照片——文件夹——数据库 例如:桌面一张照片,在tomacat里创建upload文件夹,把桌面照片上传到upload文件夹里,并且把照片的 ...

  6. 一个简单的struts2上传图片的例子

    https://www.cnblogs.com/yeqrblog/p/4398914.html 在我的大创项目中有对应的应用

  7. 微信小程序之上传图片(含前后端代码例子)

    此代码示例,能够让你成功将图片上传至后端,后端做相应的处理,然后返回成功码. 前端小程序代码 index.wxml: <view class='content'> <view cla ...

  8. 一例tornado框架下处理上传图片并生成缩略图的例子

    class coachpic(RequestHandler): @gen.coroutine def post(self): picurl = self.request.files[] print(& ...

  9. -Android -线程池 批量上传图片 -附php接收代码

    (出处:http://www.cnblogs.com/linguanh/) 目录: 1,前序 2,类特点 3,用法 4,java代码 5,php代码 1,前序 还是源于重构,看着之前为赶时间写着的碎片 ...

随机推荐

  1. 2、Redis 底层原理:Cluster 集群部署与详解

    Redis 简介 Redis 提供数据缓存服务,内部数据都存在内存中,所以访问速度非常快. 早期,Redis 单应用服务亦能满足企业的需求.之后,业务量的上升,单机的读写能力满足不了业务的需求,技术上 ...

  2. iptables禁止某个mac地址上网

    iptables -I FORWARD  -m mac --mac-source  60:14:B3:7D:6B:39 -j DROP 上面这条命令测试过是可行,禁止这个mac地址上网,马上禁止马上生 ...

  3. spark2.1源码分析3:spark-rpc如何实现将netty的Channel隐藏在inbox中

    class TransportServer bootstrap.childHandler(new ChannelInitializer<SocketChannel>() { @Overri ...

  4. spring入门 依赖入注的三种方式(1)

    第一种:构造器参数注入 第二种:setter方法属性注入(setter方法的规范-JavaBean规范) 第三种:接口注入 Bean 属性的注入:对一个对象的属性的赋值 1.构造器参数注入: publ ...

  5. 正确的学python方式

    首先呢,和其他的各种学习都一样,你一定要明白你学习的目标是什么.有的人想要通过学习Python,转行成程序员,实现行业上的转变:有的人希望通过学习Python,在现有的岗位上提升自己:当然也有很多人只 ...

  6. 【亲测可用网上的不靠谱居多】一个完整的用canvas画内容然后保存到本地的例子

    涉及好多个问题 比如保存到本地有黑色背景 怎么用把文字和图 画到画布上 腾讯的东西就是坑多了 直接上代码吧 啥也不说额 pic.wxml <view class='container'> ...

  7. Linux on window初体验

    参照来源: https://www.cnblogs.com/enet01/p/7458767.html 1:liunx on window 的配置不多说(百度网上很多)启动开发这模式,在应用和程序中勾 ...

  8. dubbo rest服务 No provider available for the service 错误问题

    1.版本 dubbo 2.6.2 2.描述 消费者调用dubbo rest服务报No provider available for the service错误 网络上有讲是实体类未实现Serializ ...

  9. Tomcat(免安装版)的安装与配置【转】

    1.下载 到Apache的官方网站,我们可以很容易找到Tomcat的下载地址,如: http://tomcat.apache.org/download-60.cgi 在这里我们可以下载到Tomcat的 ...

  10. 有了这个api接口工具-微信跳转其他浏览器下载app就这么简单

    现在微信渠道可以说是拉新最快的渠道,因为微信具备强裂变性.但是目前微信对第三方下载链接的拦截是越来越严格了,那么想要在微信内肆无忌惮地推广链接就需要用到微信跳转浏览器的api接口,那如何获取该api接 ...