文档章节

PHP学习之图片上传

乐搏学院
 乐搏学院
发布于 2017/03/23 13:53
字数 1151
阅读 8
收藏 0

图片上传在项目中经常用到,几乎没有任何一个项目可以脱离图片或者是文件上传。本篇我在这向大家介绍两种常规的上传方式。(注:在这里我们仅仅是对功能的实现,不去做过多的前端的样式)
一、利用form表单上传
此种方式是最原始的上传方式,前端就是简单的form表单,后端我们有PHP处理传输过来的文件。
首先看前端的代码 upload.html

?

1

2

3

4

<form action="handle.php" name="form" method="post" enctype="multipart/form-data">

  <input type="file" name="file" />

  <input type="submit" name="submit" value="上传" />

</form>

然后新建php文件 handle.php 代码如下

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

$file $_FILES['file'];//得到传输的数据

//得到文件名称

$name $file['name'];

$type strtolower(substr($name,strrpos($name,'.')+1)); //得到文件类型,并且都转化成小写

$allow_type array('jpg','jpeg','gif','png'); //定义允许上传的类型

//判断文件类型是否被允许上传

if(!in_array($type$allow_type)){

  //如果不被允许,则直接停止程序运行

  return ;

}

//判断是否是通过HTTP POST上传的

if(!is_uploaded_file($file['tmp_name'])){

  //如果不是通过HTTP POST上传的

  return ;

}

$upload_path "D:/now/"//上传文件的存放路径

//开始移动文件到相应的文件夹

if(move_uploaded_file($file['tmp_name'],$upload_path.$file['name'])){

  echo "Successfully!";

}else{

  echo "Failed!";

}

当然,此php处理代码不是很完善,其中对错误的情况没有进行处理,然而使用php处理上传文件的原理就是这样的,大家可以在此基础上进行优化,使其更加完善。
二、利用uploadify实现无刷新并且带进度条的上传
首先下载uploadify插件,保存在项目中的某个文件夹下面,然后引入三个文件

?

1

2

3

<link href="js/uploadify/uploadify.css" rel="stylesheet" type="text/css" />

<script type="text/javascript" src="js/uploadify/jquery.min.1.7.js"></script>

<script type="text/javascript" src=js/uploadify/jquery.uploadify.min.js"></script>

然后引用以下代码

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

<script type="text/javascript">

    $(function(){

      $(".uploadbutton").each(function(){

        

        bidtype="上传";

        $(this).uploadify({

          swf: 'js/uploadify/uploadify.swf',

          uploader: "handle.php",  //处理上传的php文件或者方法

          multi: true,  //是否开启一次性上传多个文件

          queueSizeLimit:20,  //最大允许上传的文件数量

          buttonText: bidtype,        //按钮文字

          height: 34,               //按钮高度

          width: 82,               //按钮宽度

          auto:false,  //选择完图片以后是否自动上传

          method:'post',

          fileTypeExts: "*.jpg;*.png;*.gif;*.jpeg;",      //允许的文件类型

          fileTypeDesc: "请选择图片文件",      //文件说明

          postData:{},

          formData: { "imgType""normal","timestamp":"asdfsa","token":"48f262516b3912a060d21ef6af564668" }, //提交给服务器端的参数

          onUploadSuccess: function (file, data, response) {  //一个文件上传成功后的响应事件处理

            var data = $.parseJSON(data);

          }

        });

      })

    });

  </script>

<body>

  <span id="commercial_upload" class="uploadbutton"></span>

</body>

样式如下

当然此按钮的样式我改动过,大家可以根据自己的需要修改样式文件,改变此按钮的样式
同样的php代码 handle.php

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

$file $_FILES['Filedata'];//得到传输的数据

//得到文件名称

$name $file['name'];

$type strtolower(substr($name,strrpos($name,'.')+1)); //得到文件类型,并且都转化成小写

$allow_type array('jpg','jpeg','gif','png'); //定义允许上传的类型

//判断文件类型是否被允许上传

if(!in_array($type$allow_type)){

  //如果不被允许,则直接停止程序运行

  return ;

}

//判断是否是通过HTTP POST上传的

if(!is_uploaded_file($file['tmp_name'])){

  //如果不是通过HTTP POST上传的

  return ;

}

$upload_path "D:/now/"//上传文件的存放路径

//开始移动文件到相应的文件夹

if(move_uploaded_file($file['tmp_name'],$upload_path.$file['name'])){

  echo "Successfully!";

}else{

  echo "Failed!";

}

以上两种方式上传可以说PHP处理的原理是相同的,只是前台显示的样式不同,第二种方式是无刷新,并且带有返回值,可以方便我们做其它的处理。虽然常用,但是总归会受限制,使用起来不是很灵活。

随着HTML5的发展的越来越成熟,我们可以利用h5中的一些方法实现上传功能,此时后台PHP的处理代码完全不同于以上两种方式,并且使用起来很灵活。由于篇幅限制,本篇我不向大家介绍这种方式,有兴趣的可以参考php+Html5实现无刷新图片上传教程,希望大家会喜欢。

 

 

登录乐搏学院官网http://www.learnbo.com/

或关注我们的官方微博微信,还有更多惊喜哦~

© 著作权归作者所有

乐搏学院
粉丝 9
博文 526
码字总数 707467
作品 0
丰台
程序员
私信 提问
08-05更新ThinkPHP+swfupload多图上传实例 经典实用的php多图上传

先上一张图片给大家看看效果,有需要就下载学习。不一定非要在ThinkPHP里,只是我非常喜欢去用ThinkPHP做开发了。 好了。现在咱们需要的东西是,下载一个swfupload.js网上很多,自己百度吧....

3147972
2014/03/21
0
0
PHP之微信JSSDK图片上传预览下载到服务器

1.投票报名 主要实现报名功能 (1)form表单布局 3.微信JSSDK图片上传功能 3.1 jssdk.php jsapiticket.php accesstoken.php 放在项目文件下 3.2获取wx.config所需要的信息 页面中添加如下代码...

bengozhong
2016/11/03
1K
0
DedeCMS图集上传图片弹出框显示FILEID:X的解决方法

之前用dedecms做的一个项目,编码为utf8,在用swfupload上传图片时正常。后来因为各种原因,将utf8转为gbk,但 是在上传图片时总是报错,弹出框显示FILEID:X,百度谷歌找了一通也没有找到,调...

子弹兄
2013/09/13
0
2
phpPHP创建创建jpg格式图片以及压缩图片_无需整理

其实是因为一些业务上的需求,所以需要对用户上传后的图片进行压缩,因为上传的图片比较大,显示的时候加载起来如果网速不给力的话就很吃力了,而且大图片也浪费空间,于是找了一下相关的资源...

辣条拌鱼翅
2015/01/01
0
0
PHP 如何阻止用户上传成人照片或者裸照

32402 在这份教程中,我们将会学习到如何组织用户通过PHP上传成人照片或者裸照. 示例 下载 我在phpclasses.org上面偶然发现一个很有用的,由Bakr Alsharif开发的可以帮助开发者基于皮肤像素点...

oschina
2014/04/28
26.7K
130

没有更多内容

加载失败,请刷新页面

加载更多

【AI实战】手把手教你深度学习文字识别(文字检测篇:基于MSER, CTPN, SegLink, EAST等方法)

文字检测是文字识别过程中的一个非常重要的环节,文字检测的主要目标是将图片中的文字区域位置检测出来,以便于进行后面的文字识别,只有找到了文本所在区域,才能对其内容进行识别。 文字检...

雪饼
今天
15
0
思维导图XMind 8 Pro 绿化方法(附序列号)

按部就班: Step 1 -全新下载最新版本的 Xmind 8(注必须是英文官方的版本,中文代{过}{滤}理网站的版本修改过,无法使用pj); Step 2 -安装完毕后,点击文末的下载按钮下载pj补丁文件包,将...

一只小青蛙
今天
10
0
数据结构(ER数据库)设计规范

表命名规范 表命名的规则分为3个层级,层级之间通过_分割,例如b_r_identity、d_l_identity。规约为: [leavel]_[type]_[name] [leavel] 表示数据库表的层级和功能,分为: s:业务无关的系统...

随风溜达的向日葵
今天
10
0
阿里Sentinel控制台源码修改-对接Apollo规则持久化

https://github.com/alibaba/Sentinel/wiki/%E5%9C%A8%E7%94%9F%E4%BA%A7%E7%8E%AF%E5%A2%83%E4%B8%AD%E4%BD%BF%E7%94%A8-Sentinel 动态规则扩展 https://github.com/alibaba/Sentinel/wiki......

jxlgzwh
昨天
14
0
在Linux系统中创建SSH服务器别名

如果你经常通过 SSH 访问许多不同的远程系统,这个技巧将为你节省一些时间。你可以通过 SSH 为频繁访问的系统创建 SSH 别名,这样你就不必记住所有不同的用户名、主机名、SSH 端口号和 IP 地...

老孟的Linux私房菜
昨天
15
1

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部