亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

PHP文件操作實例總結【文件上傳、下載、分頁】

 更新時間:2018年12月08日 11:20:01   作者:hello_sgw  
這篇文章主要介紹了PHP文件操作,結合實例形式總結分析了php針對文件的上傳、下載、分頁等相關操作技巧與注意事項,需要的朋友可以參考下

本文實例講述了PHP文件操作。分享給大家供大家參考,具體如下:

1、文件上傳

上傳域: input type="file"

普通文本框(text、password、textarea、radio、checkbox等):通過字節(jié)流的形式將數(shù)據(jù)提交到服務器

文件: 將文件以二進制編碼的形式提交過去,實現(xiàn)起來非常簡單,只需要在form標簽中增加 enctype="multipart/form-data"

<!-- 例如 -->
<form action="" method="post" enctype="multipart/form-data" >
  <input type="file" name="">
</form>

客戶端提交文件之后服務器端接受用 $_FILES 接收

所謂文件上傳就是將上圖的臨時文件移動到指定的目的地

使用函數(shù) move_uploaded_file( file,newpath) 返回bool值

1.1 文件上傳案例

// 例如
move_uploaded_file($_FILES['myfile']['tmp_name'], 'd:/upload/');

1.2 防止上傳文件過大

知識

1GB == 1024MB
1MB == 1024KB
1KB == 1024Byte

$max_size = 3*1024*1024; // 約束為3M
if($_FILES['myfile']['size'] > $max_size){
  echo '上傳圖片大于3M';
  exit;
}
// 上傳
if(move_uploaded_file($_FILES['myfile']['tmp_name'], $path)){
  echo '上傳成功';
} else {
  echo '上傳失敗';
}

注意 php.ini 文件可以修改上傳文件限制: 是否允許上傳、上傳的臨時目錄、文件最大限制、一次上傳最大數(shù)量

1.3 防止文件被覆蓋

1、我們在服務器端進行驗證,在移動到目的地的時候,生成新的文件名時,使用隨機數(shù)命名,可以避免文件名重復
2、按日期保存文件夾

1.4 控制上傳的文件類型

一般需求是:.jpg .png .gif 格式的圖片

防止修改文件后綴然后上傳,可以借助php的擴展 Finfo,更加精確的獲得文件的類型

// 為了防止用戶修改文件后綴,使用php的一個擴展 Finfo 實現(xiàn)
# 1、開啟php.ini 中php擴展
extension=php_fileinfo.dll
# 2、使用擴展類獲取上傳文件真實類型
$finfo = new Finfo(FILEINFO_MIME_TYPE);
$mime_type = $finfo->file($_FILES['myfile']['tmp_name']);

自己封裝的上傳文件類

/*
 * 說明:文件上傳類
 * 作者:sgw
 * 時間:2018-7-31
 */
class Upload
{
  //成員屬性
  private $_maxsize    = 2*1024*1024;  //上傳的文件最大范圍2M
  private $_upload_path  = 'upload/'; //上傳的文件保存路徑
  private $_prefix     = 'odshen_';       //文件名的前綴
  private $allow_type   = array('.jpg','.png','.gif','.jpeg');  //允許上傳的文件類型
  private $allow_mime_type = array('image/jpeg','image/png','image/gif','image/jpg');
  /**
   * set 設置私有的屬性
   * @param [str] $p [屬性名]
   * @param [mix] $v [給屬性賦的值]
   */
  public function __set($p,$v)
  {
    if(property_exists($this,$p)){
      $this -> $p = $v;
    }
  }
  /**
   * get 獲取私有屬性
   * @param [str] $p [屬性名]
   */
  public function __get($p)
  {
    if(property_exists($this,$p)){
      return $this -> $p;
    }
  }
  /**
   * 上傳文件方法
   * @param [mix] $file [上傳的文件]
   */
  public function doUpload($file)
  {
    //判斷用戶上傳的文件大小
    $max_size = $this->_maxsize;  //約束最大為2M
    if($file['size'] > $max_size){
      echo '上傳文件過大,重新上傳';
      exit;
    }
    #防止上傳的文件被覆蓋
    $prefix = $this->_prefix;
    // 文件名唯一
    $filename = uniqid($prefix,true);
    //文件的后綴,從上傳的文件名稱中截取最后一個點后面的內容 strrchr
    $ext = strrchr($file['name'],'.');
    //分目錄保存上傳的文件,按照日期格式保存
    $sub_path = $this->_upload_path.date('Ymd').'/';    // upload/20180731/
    # 如果當前目錄不存在,需要先創(chuàng)建 ,絕對路徑
    $now_path = __DIR__.'/';
    $now_path = str_replace('\\','/',$now_path.$sub_path);
    if(!is_dir($now_path)){
      mkdir($now_path,0777,true);
    }
    # 限制用戶上傳的文件類型
    if(!in_array($ext,$this->allow_type)){
      echo '文件類型不支持';
      exit;
    }
    # 防止用戶修改文件的后綴,借助php的一個擴展Finfo實現(xiàn),精確獲得每個文件在網絡中的類型
    $finfo = new Finfo(FILEINFO_MIME_TYPE);
    $mime_type = $finfo -> file($file['tmp_name']);
    if(!in_array($mime_type,$this->allow_mime_type)){
      echo '文件類型不支持';
      exit;
    }
    //參數(shù)1:待移動的文件(臨時文件)
    //參數(shù)2:目的地
    //返回結果布爾類型
    if(move_uploaded_file($file['tmp_name'],$now_path.$filename.$ext)){
      //上傳成功將上傳的文件地址返回,便于在其他地方使用該圖片,就需要能夠找到該圖片
      return $sub_path . $filename.$ext;
    }else{
      //echo '上傳失敗';
      return false;
    }
  }
}

2、文件下載

文件大的借助第三方軟件下載 ,例如百度云盤,迅雷;如果文件小,直接使用php進行下載

以下方法即可

//先接收地址欄中傳遞的文件名,也就是下載的是哪一個文件
$filename = $_GET['filename'];
if($filename==''){
  echo '文件未找到,下載失敗';
  exit;
}
//拼接好文件的路徑
$full_name = 'img/'.$filename;
//圖片在windows系統(tǒng)下面gbk編碼,php文件是utf-8編碼
//通常需要先將php文件的編碼修改為gbk
$full_name = iconv('utf-8','gbk',$full_name);
$filesize = filesize($full_name);
# 【主要】開始下載,通過header頭信息告訴瀏覽器我向你回應的是文件資源
//返回的文件
header("Content-type: application/octet-stream");
//按照字節(jié)大小返回
header("Accept-Ranges: bytes");
//顯示文件大小
header("Content-Length: $filesize");
//這里客戶端的彈出對話框,對應的文件名
header("Content-Disposition: attachment; filename=".$filename);
//開始讀取文件資源并回應給瀏覽器
$fp = fopen($full_name,'r');
while(!feof($fp)){
  $data = fread($fp,1024);
  echo $data;
}
fclose($fp);

3、分頁類

結合 bootstrap

/*
 * 分頁顯示數(shù)據(jù)
 */
class Page
{
  private $_total;  //總的記錄數(shù)
  private $_pagesize;  //每頁顯示的記錄數(shù)
  private $_pagenow; //當前頁碼數(shù)
  private $_url;   //點擊超鏈接時跳轉的url地址
  /**
   * set 設置私有的屬性
   * @param [str] $p [屬性名]
   * @param [mix] $v [給屬性賦的值]
   */
  public function __set($p,$v)
  {
    if(property_exists($this,$p)){
      $this -> $p = $v;
    }
  }
  /**
   * get 獲取私有屬性
   * @param [str] $p [屬性名]
   */
  public function __get($p)
  {
    if(property_exists($this,$p)){
      return $this -> $p;
    }
  }
  //動態(tài)創(chuàng)建分頁導航條
  public function create()
  {
    //定義首頁按鈕
    //當前頁高亮顯示
    $first_active = $this->_pagenow == 1?'active':'';
    $url = $this -> _url.'?page=';
    $first = 1;
    $PAGE = <<<HTML
      <ul class="pagination">
        <li class="$first_active"><a href="$url$first" rel="external nofollow" >首頁</a></li>
HTML;
    //創(chuàng)建中間的分頁導航按鈕
    //先計算目前有多少頁 == 總的數(shù)據(jù) / 每頁顯示的數(shù)據(jù)
    $page_count = ceil($this -> _total / $this ->_pagesize);
    for($i=$this->_pagenow-3; $i<=$this->_pagenow+3; $i++){
      $active = $this->_pagenow == $i?'active':'';
      if($i <= 1 || $i>= $page_count){
        continue;  //跳出本次循環(huán)
      }
      $PAGE .= <<<HTML
      <li class="$active"><a href="$url$i" rel="external nofollow" >$i</a></li>
HTML;
    }
    //定義尾頁按鈕
    $last_active = $this->_pagenow == $page_count?'active':'';
    $PAGE .= <<<HTML
      <li class="$last_active"><a href="$url$page_count" rel="external nofollow" >尾頁</a></li>
    </ul>
HTML;
    //將創(chuàng)建的分頁導航條返回
    return $PAGE;
  }
}

更多關于PHP相關內容感興趣的讀者可查看本站專題:《php文件操作總結》、《PHP目錄操作技巧匯總》、《PHP常用遍歷算法與技巧總結》、《PHP數(shù)據(jù)結構與算法教程》、《php程序設計算法總結》及《PHP網絡編程技巧總結

希望本文所述對大家PHP程序設計有所幫助。

相關文章

  • PHP使用PDO訪問oracle數(shù)據(jù)庫的步驟詳解

    PHP使用PDO訪問oracle數(shù)據(jù)庫的步驟詳解

    POD擴展是在PHP5中加入,該擴展提供PHP內置類 PDO來對數(shù)據(jù)庫進行訪問,不同數(shù)據(jù)庫使用相同的方法名,解決數(shù)據(jù)庫連接不統(tǒng)一的問題。下面這篇文章主要給大家介紹了關于PHP使用PDO訪問oracle數(shù)據(jù)庫的步驟,需要的朋友可以參考下。
    2017-09-09
  • PHP基于數(shù)組實現(xiàn)的分頁函數(shù)實例

    PHP基于數(shù)組實現(xiàn)的分頁函數(shù)實例

    這篇文章主要介紹了PHP基于數(shù)組實現(xiàn)的分頁函數(shù)實例,是非常實用的一個技巧,需要的朋友可以參考下
    2014-08-08
  • PHP的命令行命令使用指南

    PHP的命令行命令使用指南

    這篇文章主要介紹了PHP的命令行命令使用指南,是PHP入門學習中的基礎知識,需要的朋友可以參考下
    2015-08-08
  • PHP擴展mcrypt實現(xiàn)的AES加密功能示例

    PHP擴展mcrypt實現(xiàn)的AES加密功能示例

    這篇文章主要介紹了PHP擴展mcrypt實現(xiàn)的AES加密功能,結合實例形式分析了php基于mcrypt實現(xiàn)AES加密的相關操作技巧,需要的朋友可以參考下
    2019-01-01
  • PHP 年齡計算函數(shù)(精確到天)

    PHP 年齡計算函數(shù)(精確到天)

    因為一個具體的項目中要用到年齡計算,根據(jù)生日計算出當前的年齡。這個精確到天,和騰訊是一樣的,大家有需要的可以參考一下
    2012-06-06
  • PHP 利用AJAX獲取網頁并輸出的實現(xiàn)代碼(Zjmainstay)

    PHP 利用AJAX獲取網頁并輸出的實現(xiàn)代碼(Zjmainstay)

    PHP 利用AJAX獲取網頁并輸出的實現(xiàn)代碼,需要的朋友可以參考下
    2012-08-08
  • PHP之uniqid()函數(shù)用法

    PHP之uniqid()函數(shù)用法

    這篇文章主要介紹了PHP中uniqid()函數(shù)的用法,包括了函數(shù)的基本用法與應用分析,是非常實用的技巧,需要的朋友可以參考下
    2014-11-11
  • 如何批量替換相對地址為絕對地址(利用bat批處理實現(xiàn))

    如何批量替換相對地址為絕對地址(利用bat批處理實現(xiàn))

    你的url鏈接是相對路徑你想把他批量替換成絕對路徑該怎么做呢?下面與大家分享下具體的實現(xiàn)思路及代碼,只需點擊bat文件,全部頁面里的相對地址就會變成絕對地址了
    2013-05-05
  • PHP 高級課程筆記 面向對象

    PHP 高級課程筆記 面向對象

    第一節(jié)課,講的是面向對象的基本知識,介紹了類的封裝,類的繼承,對象,類的定義和使用,類的結構,成員方法,成員變量與屬性等零碎知識,這里只是把幾個例子的源代碼貼出來,僅供參考。
    2009-06-06
  • php 重寫分頁器 CLinkPager的實例

    php 重寫分頁器 CLinkPager的實例

    這篇文章主要介紹了php 重寫分頁器 CLinkPager的實例的相關資料,希望通過本文能幫助到大家,讓大家實現(xiàn)這樣的功能,需要的朋友可以參考下
    2017-10-10

最新評論