国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > PHP > 正文

PHP生成壓縮文件開發實例

2020-03-22 19:05:40
字體:
來源:轉載
供稿:網友
  • 大概需求:

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

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

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

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

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

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

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

    文件路徑:

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

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

    1.基本配置文件文件 config.inc.php放在系統根目錄

    define('SYS_ROOT', str_replace("http://", '/', 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.壓縮包html' target='_blank'>程序代碼文件 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'; //下載的文件名 如果為空那么就是系統自定義名稱 如果指定就顯示指定名字$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;}        

    鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

  • 發表評論 共有條評論
    用戶名: 密碼:
    驗證碼: 匿名發表
    主站蜘蛛池模板: 田东县| 彝良县| 达拉特旗| 昌宁县| 扬中市| 兴仁县| 青川县| 鹤庆县| 望谟县| 黄陵县| 浪卡子县| 罗平县| 武城县| 大田县| 滦南县| 麻栗坡县| 高密市| 大渡口区| 正阳县| 颍上县| 东平县| 神木县| 古交市| 临邑县| 周口市| 江川县| 邵东县| 和龙市| 新和县| 惠来县| 宁波市| 晋城| 伽师县| 团风县| 清涧县| 哈尔滨市| 敖汉旗| 丰城市| 富锦市| 闽清县| 法库县|