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

本文介绍了一种使用PHP实现文件上传和下载的方法。通过一个简单的上传类,演示了如何检查上传文件的合法性,包括文件类型、大小及是否存在。同时,还提供了一个下载函数,支持断点续传。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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>

 

 

【基于QT的调色板】是一个使用Qt框架开发的色彩选择工具,似于Windows操作系统中常见的颜色选取器。Qt是一个跨平台的应用程序开发框架,广泛应用于桌面、移动和嵌入式设备,支持C++和QML语言。这个调色板功能提供了横竖两种渐变模式,用户可以方便地选取所需的颜色值。 在Qt中,调色板(QPalette)是一个关键的,用于管理应用程序的视觉样式。QPalette包含了一系列的颜色角色,如背景色、前景色、文本色、高亮色等,这些颜色可以根据用户的系统设置或应用程序的需求进行定制。通过自定义QPalette,开发者可以创建具有独特视觉风格的应用程序。 该调色板功能可能使用了QColorDialog,这是一个标准的Qt对话框,允许用户选择颜色。QColorDialog提供了一种简单的方式来获取用户的颜色选择,通常包括一个调色板界面,用户可以通过滑动或点击来选择RGB、HSV或其他色彩模型中的颜色。 横渐变取色可能通过QGradient实现,QGradient允许开发者创建线性或径向的色彩渐变。线性渐变(QLinearGradient)沿直线从一个点到另一个点过渡颜色,而径向渐变(QRadialGradient)则以圆心为中心向外扩散颜色。在调色板中,用户可能可以通过滑动条或鼠标拖动来改变渐变的位置,从而选取不同位置的颜色。 竖渐变取色则可能是通过调整QGradient的方向来实现的,将原本水平的渐变方向改为垂直。这种设计可以提供另一种方式来探索颜色空间,使得选取颜色更为直观和便捷。 在【colorpanelhsb】这个文件名中,我们可以推测这是HSB(色相、饱和度、亮度)色彩模型相关的代码或资源。HSB模型是另一种常见且直观的颜色表示方式,RGB或CMYK模型不同,它以人的感知为基础,更容易理解。在这个调色板中,用户可能可以通过调整H、S、B三个参数来选取所需的颜色。 基于QT的调色板是一个利用Qt框架和其提供的色彩管理工具,如QPalette、QColorDialog、QGradient等,构建的交互式颜色选择组件。它不仅提供了横竖渐变的色彩选取方式,还可能支持HSB色彩模型,使得用户在开发图形用户界面时能更加灵活和精准地控制色彩。
标题基于Spring Boot的二手物品交易网站系统研究AI更换标题第1章引言阐述基于Spring Boot开发二手物品交易网站的研究背景、意义、现状及本文方法创新点。1.1研究背景意义介绍二手物品交易的市场需求和Spring Boot技术的适用性。1.2国内外研究现状概述当前二手物品交易网站的发展现状和趋势。1.3论文方法创新点说明本文采用的研究方法和在系统设计中的创新之处。第2章相关理论技术介绍开发二手物品交易网站所涉及的相关理论和关键技术。2.1Spring Boot框架解释Spring Boot的核心概念和主要特性。2.2数据库技术讨论适用的数据库技术及其在系统中的角色。2.3前端技术阐述后端配合的前端技术及其在系统中的应用。第3章系统需求分析详细分析二手物品交易网站系统的功能需求和性能需求。3.1功能需求列举系统应实现的主要功能模块。3.2性能需求明确系统应满足的性能指标和安全性要求。第4章系统设计实现具体描述基于Spring Boot的二手物品交易网站系统的设计和实现过程。4.1系统架构设计给出系统的整体架构设计和各模块间的交互方式。4.2数据库设计详细阐述数据库的结构设计和数据操作流程。4.3界面设计实现介绍系统的界面设计和用户交互的实现细节。第5章系统测试优化说明对系统进行测试的方法和性能优化的措施。5.1测试方法步骤测试环境的搭建、测试数据的准备及测试流程。5.2测试结果分析对测试结果进行详细分析,验证系统是否满足需求。5.3性能优化措施提出针对系统性能瓶颈的优化建议和实施方案。第6章结论展望总结研究成果,并展望未来可能的研究方向和改进空间。6.1研究结论概括本文基于Spring Boot开发二手物品交易网站的主要发现和成果。6.2展望改进讨论未来可能的系统改进方向和新的功能拓展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值