`
wangyalei
  • 浏览: 53699 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

php学习笔记(上传与下载类)

    博客分类:
  • PHP
阅读更多

php中的文件上传很简单 不像java 中需要借助 commons-fileupload-1.2.1.jar 等第三个的上转工具来做,下面我写了一个简单的上转类。

php中$_FILES内置函数包含了要上传文件的所有信息量。

 

 $_FILES("uploadName"); 输出的话可以看见他是一个数组里面包含了 name,type,tmp_name,error,size元素

 

上传不可避免,要出现异常,php为此给出了5个类型常

  0---> 文件上转成功 --->UPLOAD_ERR_OK
  1--->上传文件超过php.ini 的upload_max_file的设置--->UPLOAD_ERR_INI_SIZE
  2--->上传文件超过特殊表单项MAX_FILE_SIZE(我们自己设置的)设置的值--->UPLOAD_ERR_FORM_SIZE
  3---> 文件只有部分上转-----> UPLOAD_ERR_PARTLAY
  4---> 没有文件被上转-----> UPLOAD_NO_FILE

 

  一个简单的上传

 

<?php

/******
 * @author wangyalei
 * 上传公用类
 *
 */
class upload {


    //上传的类型
    private $type = array();
	//上传的保存路径
    private $savepath;
	 //上传的大小
    private $size;
    //上传内容信息
    private $uploadinfo;

    private $label_name;

   /******
    * @param $type 可以是数组 也可是 多个字符串(字符串,字符串)
    * @param $savepath 上传后保存的路径
    * @param $size 设定上传的大小
    *
    */

    public function __construct($type,$savepath,$size,$label_name){


    	$this->type = is_array($type)?$this->type = $type:$this->type = implode(",",$type);
    	$this->savepath = $savepath;
    	$this->size = $size;
    	$this->label_name = $label_name;
 		$this->uploadinfo = $_FILES[$label_name];

    }

    //保存
    public function save(){

      //上传要进行检测是否合法

      //1 判断用户是真实上传
      if(!is_uploaded_file($this->uploadinfo["tmp_name"])){

			echo "文件不存在";
			exit;

      }


      //2判断类型是否正确

      if(!in_array($this->uploadinfo["type"],$this->type)){


      		 echo "<font color='red'>文件类型不符!只能上传".implode(',',$this->type)."类型</font>";
             exit;

      }

      //3判断上传大小

      if($this->size<$this->uploadinfo["size"]){

      	 echo "文件太大!";
         exit;

      }



   //2 判断是否有要保持的文件夹 如没有创建一个
	if(!file_exists($this->savepath)){

		mkdir($this->savepath);
     }

      //从临时目录移除 并给文件重命名 防止 重名覆盖
      if(!move_uploaded_file($this->uploadinfo["tmp_name"],$this->savepath."/".$this->uploadinfo["name"])){
         echo $this->uploadinfo["tmp_name"];
      	 echo "移动文件出错";
         exit;

      }

	  //最后判断一点错都没有
       if($this->uploadinfo["error"]=="0"){

       	   echo "上传成功";
       }

  }

}
?>

 

 测试一下:

 

<?php
/*
 * Created on 2010-8-19
 *
 * To change the template for this generated file go to
 * Window - Preferences - PHPeclipse - PHP - Code Templates
 */

include("upload.class.php");

 //上传文件类型列表
$uptypes=array(
    'image/jpg',
    'image/jpeg',
    'image/png',
    'image/pjpeg',
    'image/gif',
    'image/bmp',
    'image/x-png'
);

$max_file_size=2000000*1024;     //上传文件大小限制, 单位BYTE

$destination_folder="uploadimg"; //上传文件路径

 $upload = new upload($uptypes,$destination_folder,$max_file_size,"file1");
 $upload->save();

?>

 

 

<!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>
   <form action="upload.php" method="post" enctype="multipart/form-data">
  			<input type="file" name="file1"><span id="upload"></span><br/>
            <input type="submit" name="submit" value="上传">
  </form>
</body>
</html>

 

 以上是上传,下面是下载

 

<?php

function download($url, $filename) {

  // 获得文件大小, 防止超过2G的文件, 用sprintf来读  %u 十进制无符号整数
     $filesize = sprintf ( "%u", filesize($url ) );
     //spinrtf 
      if (!$filesize) {
           return;
       }
         header ( "Content-type:application/octet-stream\n" ); //application/octet-stream
         header ( "Content-type:unknown/unknown;" );
	     header ( "Content-disposition: attachment; filename=\"" . $filename . "\"" );
	     header ( 'Content-transfer-encoding: binary' );
    if ($range = getenv ( 'HTTP_RANGE' )) { // 当有偏移量的时候,采用206的断点续传头
          $range = explode ( '=', $range );
        $range = $range [1];

//
          header ( "HTTP/1.1 206 Partial Content" );
          header ( "Date: " . gmdate ( "D, d M Y H:i:s" ) . " GMT" );
          header ( "Last-Modified: " . gmdate ( "D, d M Y H:i:s", filemtime ( $url ) ) . " GMT" );
          header ( "Accept-Ranges: bytes" );
          header ( "Content-Length:" . ($filesize - $range) );
          header ( "Content-Range: bytes " . $range . ($filesize - 1) . "/" . $filesize );
          header ( "Connection: close" . "\n\n" );
        } else {
           header ( "Content-Length:" . $filesize . "\n\n" );
         $range = 0;
       }
        loadFile ( $url );
  }

  function loadFile($filename, $retbytes = true) {
      $buffer = '';
       $cnt = 0;
     $handle = fopen ( $filename, 'rb' );
      if ($handle === false) {
         return false;
      }
      while ( ! feof ( $handle ) ) {
         $buffer = fread ( $handle, 1024 * 1024 );
         echo $buffer;
           ob_flush ();
           flush ();
         if ($retbytes) {
            $cnt += strlen ( $buffer );
            }
      }
      $status = fclose ( $handle );
       if ($retbytes && $status) {
          return $cnt; // return num. bytes delivered like readfile() does.
       }
     return $status;
 }


?>

 

测试代码

 

<?php

include("downupload.php");

download($_GET[url], $_GET[name]);
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<a href="index.php?url=index.php&name=我的.txt">下载</a>
</body>
</html>

 

 

分享到:
评论

相关推荐

    当年我学PHP时整理的学习笔记

    【标题】:“当年我学PHP时整理的学习笔记” 这篇学习笔记是作者在学习PHP编程语言的过程中逐步积累并整理的,涵盖了初学者从基础到进阶的一些关键知识点。PHP是一种广泛应用于网页开发的服务器端脚本语言,尤其在...

    php框架学习笔记.doc

    PHP框架学习笔记是学习PHP框架的重要笔记,涵盖了CI框架的基本概念、控制器、模型、视图、URI路由、数据库操作、表单提交、上传文件、Session管理等方面的知识点。 CI框架的业务流程是从域名或入口开始的,默认入口...

    PHP文件上传与下载学习笔记

    在PHP中,文件上传和下载是常见的Web应用功能,用于处理用户上传的文件或提供文件供用户下载。...总的来说,理解并熟练掌握PHP文件上传与下载的配置、错误处理和安全措施,对于开发健壮的Web应用程序是必不可少的。

    php100学习笔记

    根据提供的“php100学习笔记”的部分内容,我们可以总结出一系列重要的PHP知识点,涉及字符串处理、文件操作、类与对象的基础等内容。 ### 字符串处理 #### `str_replace` `str_replace`函数用于在字符串中替换...

    php学习笔记

    【PHP学习笔记】 在深入PHP之前,我们先回顾一下HTML的一些基础知识点。`&lt;hr&gt;`标签用于在HTML页面中创建一条水平线,起到分隔内容的作用。`target="_blank"`属性用于链接,当点击链接时会在新窗口打开目标页面。在...

    PHP学习笔记.rar

    【PHP学习笔记】是作者四个月学习PHP过程中积累的个人笔记,主要涵盖了HTML基础、CSS基础以及PHP基础等核心内容。这些笔记对于初学者来说是非常有价值的资源,因为它们以小案例的形式展示了各种知识点,便于理解和...

    php全套笔记韩顺平

    《PHP全套笔记韩顺平》资源集合了著名IT教育机构传智播客讲师韩顺平的PHP教学精华,包括详细的笔记文档和部分PPT,旨在为PHP初学者和进阶者提供全面的学习材料。这份资源涵盖了PHP的基础知识、高级特性以及实际项目...

    php学习笔记实例代码

    《PHP学习笔记实例代码详解》 PHP,全称“PHP:Hypertext Preprocessor”,是一种广泛使用的开源服务器端脚本语言,尤其适用于Web开发。它能够嵌入到HTML中,使得开发者可以灵活地处理动态网页内容。这篇学习笔记...

    PHP学习笔记

    【PHP学习笔记】是一份全面的教程资源,旨在帮助初学者快速掌握PHP编程语言的基础和进阶知识。这份笔记包含了从基本语法到高级特性的详细讲解,是学习PHP的理想起点。 1. **PHP基础语法**(01_PHP语法.doc):这...

    PHP整理笔记

    PHP的学习笔记通常会涵盖以下几个核心知识点: 1. **基础语法**:PHP的基础包括变量、常量、数据类型(如字符串、整型、浮点型、数组、布尔型、NULL)、运算符(算术、比较、逻辑、位运算、赋值)、流程控制(条件...

    php第一部分学习笔记源码

    这份"php第一部分学习笔记源码"是初学者掌握PHP基础的一个宝贵资源,它涵盖了PHP的基础概念、语法以及常见应用。 首先,PHP的核心特性在于它的服务器端脚本能力。这意味着PHP代码在服务器上执行,然后将结果以HTML...

    PHP学习笔记之目录与文件操作

    这篇学习笔记将深入探讨这一主题,旨在帮助初学者和经验丰富的开发者更好地理解和利用PHP处理文件系统。 首先,了解基本的文件操作函数至关重要。例如,`file_exists()`用于检查文件或目录是否存在,`is_file()`则...

Global site tag (gtag.js) - Google Analytics