最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

PHP生成壓縮文件實例

 更新時間:2015年02月07日 16:33:55   投稿:junjie  
這篇文章主要介紹了PHP生成壓縮文件實例,本文直接給出實現代碼,需要的朋友可以參考下

大概需求:

每一個訂單都有多個文件附件,在下載的時候希望對當前訂單的文件自動打包成一個壓縮包下載

細節(jié)需求:當前訂單號_年月日+時間.zip  例如:

1.生成壓縮文件,壓縮文件名格式:

2.壓縮文件存放在根目錄 /upload/zipfile/年月/自定義的壓縮文件名.zip

3.點擊下載壓縮包,系統(tǒng)開始對壓縮文件打包,打包完成后自動開始下載

4.為了防止暴露壓縮包文件路徑,需要對下載的壓縮包文件名改名

 

具體操作模式請見下面的代碼:

文件路徑:

壓縮包文件存放路徑:/upload/zipfile/

上傳的附件存放路徑:/upload/file/

1.基本配置文件文件 config.inc.php放在系統(tǒng)根目錄

 

define('SYS_ROOT', str_replace("\\", '/', dirname(__FILE__)));
define('SYS_UPLOAD', SYS_ROOT.'/upload/file');
define('SYS_DOWNLOAD', SYS_ROOT.'/upload/zipfile');
define('SYS_WIN', strpos(strtoupper(PHP_OS), 'WIN') !== false ? true: false);
define('SYS_CHMOD', ('0777' && !SYS_WIN) ? '0777' : 0);

 

2.壓縮包程序代碼文件 getzip.php

header("Content-type: text/html; charset=utf-8");
require_once '../config.inc.php'; //載入配置路徑配置文件
$arrfiles = array(SYS_UPLOAD . '/1.jpg',
  SYS_UPLOAD . '/x.jpg',); //這里是附件的文件數組
$orderNum = '888'; //訂單號
$downFileName = 'tieniu.zip'; //下載的文件名 如果為空那么就是系統(tǒng)自定義名稱 如果指定就顯示指定名字
$zipUrl = create_zip($arrfiles, $orderNum); //生成的壓縮文件名詞
file_down($zipUrl, $downFileName); //提供http下載,并可以進行重命名下載文件,建議重命名,防止路徑猜解

/*
 * 生成壓縮包文件名
 * @param [String] $orderNum 訂單號
 * @return [String] 返回帶有絕對路徑的訂單號的壓縮文件名
 */

function get_zipname($orderNum) {
  $zipName = SYS_DOWNLOAD . '/' . date('Ym') . '/' . $orderNum . '_' . date("Ymd_Hi") . '.zip';
  return $zipName;
}

/*
 * 按照特定需求打包壓縮包的目錄結構設置
 */

function pack_object() {
  
}

/*
 * 生成壓縮包
 * @param [Array] $arrfiles 帶有絕對路徑的文件數組
 * @param [String] $orderNum 訂單號
 * @return [String] 返回帶有絕對路徑的訂單號的壓縮文件名 如如果失敗返回 FALSE
 */

function create_zip($arrfiles, $orderNum) {
  $zipName = get_zipname($orderNum); //獲得文件名
  dir_create(dirname($zipName)); //建立生成壓縮文件的目錄
  $zip = new ZipArchive();
  if ($zip->open($zipName, ZIPARCHIVE::CREATE) !== TRUE) {
    return FALSE;
  }
  foreach ($arrfiles as $path) {
    if (is_file($path)) {//判斷文件是否存在
      $zip->addFile($path, basename($path)); //把文件加入到壓縮包中
    }
  }
  $zip->close();
  return $zipName;
}

/*
 * 處理文件目錄
 * @param [Array] $arrfiles 帶有絕對路徑的文件數組
 * @param [String] $dirpath 文件路徑
 * @return [String] 返回處理的文件路徑,方便生成文件目錄
 */

function dir_path($dirpath) {
  $dirpath = str_replace('\\', '/', $dirpath);
  if (substr($dirpath, -1) != '/')
    $dirpath = $dirpath . '/';
  return $dirpath;
}

/*
 * 生成文件目錄
 * @param [String] $path 文件路徑
 * @return [String] 返回生成的文件目錄結構
 */

function dir_create($path) {
  if (is_dir($path))
    return true;
  $dir = str_replace(SYS_DOWNLOAD . '/', '', $path);
  $dir = dir_path($dir);
  $temp = explode('/', $dir);
  $cur_dir = SYS_DOWNLOAD . '/';
  $max = count($temp) - 1;
  for ($i = 0; $i < $max; $i++) {
    $cur_dir .= $temp[$i] . '/';
    if (is_dir($cur_dir))
      continue;
    @mkdir($cur_dir);
    if (SYS_CHMOD)
      @chmod($cur_dir, SYS_CHMOD);
    if (!is_file($cur_dir . '/index.html') && !is_file($cur_dir . '/index.php'))
      file_copy(SYS_ROOT . '/upload/index.html', $cur_dir . '/index.html');
  }

  return is_dir($path);
}

/*
 * 文件COPY
 * @param [String] $from copy源文件
 * @param [String] $to copy文件目的地
 * @return [Bool] 成功 ture 失敗 false
 */

function file_copy($from, $to) {
  dir_create(dirname($to));
  if (is_file($to) && SYS_CHMOD)
    @chmod($to, SYS_CHMOD);
  if (@copy($from, $to)) {
    if (SYS_CHMOD)
      @chmod($to, SYS_CHMOD);
    return true;
  } else {
    return false;
  }
}

/*
 * 文件下載處理函數
 * @param [String] $file 文件路徑
 * @param [String] $filename 下載時間重新命名的文件名
 * @param [String] $data 下載文件填裝的數據內容
 */

function file_down($file, $filename = '', $data = '') {
  if (!$data && !is_file($file))
    exit;
  $filename = $filename ? $filename : basename($file);
  $filetype = file_ext($filename);
  $filesize = $data ? strlen($data) : filesize($file);
  ob_end_clean();
  @set_time_limit(0);
  if (strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') !== false) {
    header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
    header('Pragma: public');
  } else {
    header('Pragma: no-cache');
  }
  header('Expires: ' . gmdate('D, d M Y H:i:s') . ' GMT');
  header('Content-Encoding: none');
  header('Content-Length: ' . $filesize);
  header('Content-Disposition: attachment; filename=' . $filename);
  header('Content-Type: ' . $filetype);
  if ($data) {
    echo $data;
  } else {
    readfile($file);
  }
  exit;
}

function file_ext($filename) {
  return strtolower(trim(substr(strrchr($filename, '.'), 1)));
}

//此函數未用到,用來做整個目錄的打包下載
function listdir($start_dir = '.') {
  $files = array();
  if (is_dir($start_dir)) {
    $fh = opendir($start_dir);
    while (($file = readdir($fh)) !== false) {
      if (strcmp($file, '.') == 0 || strcmp($file, '..') == 0)
        continue;
      $filepath = $start_dir . '/' . $file;
      if (is_dir($filepath))
        $files = array_merge($files, listdir($filepath));
      else
        array_push($files, $filepath);
    }
    closedir($fh);
  } else {
    $files = false;
  }
  return $files;
}

 

3.PHP程序生成壓縮文件需要用到壓縮類:ZipArchive

這個是php的擴展類,自php5.2版本以后就已經支持這個擴展,如果你在使用的時候出現錯誤,查看下php.ini里面的extension=php_zip.dll前面的分號有沒有去掉,然后再重啟Apache這樣才能使用這個類庫。

相關文章

  • php封裝的驗證碼類分享

    php封裝的驗證碼類分享

    本文給大家分享的是一個php封裝的驗證碼類的代碼和原理及思路,非常的清晰詳細,有需要的小伙伴可以參考下
    2017-02-02
  • PHP sdk實現在線打包代碼示例

    PHP sdk實現在線打包代碼示例

    這篇文章主要介紹了PHP sdk實現在線打包代碼示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-12-12
  • thinkphp實現面包屑導航(當前位置)例子分享

    thinkphp實現面包屑導航(當前位置)例子分享

    今天把博客一些細節(jié)完善了一下,其中修改了一下欄目頁和文章頁中的“當前位置”。
    2014-05-05
  • laravel 5.3 單用戶登錄簡單實現方法

    laravel 5.3 單用戶登錄簡單實現方法

    今天小編就為大家分享一篇laravel 5.3 單用戶登錄簡單實現方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-10-10
  • laravel配置Redis多個庫的實現方法

    laravel配置Redis多個庫的實現方法

    這篇文章主要介紹了laravel配置Redis多個庫的實現方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-04-04
  • Laravel框架DB facade數據庫操作詳解

    Laravel框架DB facade數據庫操作詳解

    這篇文章主要介紹了Laravel框架DB facade數據庫操作,結合實例形式詳細分析了laravel數據庫基本創(chuàng)建、連接、增刪改查等操作技巧,需要的朋友可以參考下
    2019-12-12
  • PHP設計模式之外觀模式(Facade)入門與應用詳解

    PHP設計模式之外觀模式(Facade)入門與應用詳解

    這篇文章主要介紹了PHP設計模式之外觀模式(Facade),結合實例形式詳細分析了PHP外觀模式的具體原來、用法及相關操作注意事項,需要的朋友可以參考下
    2019-12-12
  • PHP使用CURL_MULTI實現多線程采集的例子

    PHP使用CURL_MULTI實現多線程采集的例子

    這篇文章主要介紹了PHP使用CURL_MULTI實現多線程采集的例子,CURL_MULTI可以對HTTP進行并發(fā)訪問,需要的朋友可以參考下
    2014-07-07
  • PHP大文件分割分片上傳實現代碼

    PHP大文件分割分片上傳實現代碼

    這篇文章主要介紹了PHP大文件分割分片上傳實現代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-12-12
  • PHP設計模式之觀察者模式入門與應用案例詳解

    PHP設計模式之觀察者模式入門與應用案例詳解

    這篇文章主要介紹了PHP設計模式之觀察者模式入門與應用,結合具體案例形式詳細分析了PHP觀察者模式的相關概念、原理、使用方法及操作注意事項,需要的朋友可以參考下
    2019-12-12

最新評論

崇信县| 江山市| 玉屏| 长阳| 定结县| 香港 | 乐亭县| 咸阳市| 梁平县| 沂水县| 威海市| 游戏| 庄浪县| 嵊州市| 汉中市| 鹰潭市| 二连浩特市| 祁东县| 三都| 伊金霍洛旗| 新疆| 越西县| 台中县| 嫩江县| 鹰潭市| 阳春市| 四川省| 青海省| 柏乡县| 和林格尔县| 岳西县| 当涂县| 梧州市| 新化县| 龙山县| 桓台县| 绥宁县| 新干县| 榆社县| 合阳县| 四会市|