Jadual Kandungan
一个做页面静态化的php类
Rumah pembangunan bahagian belakang tutorial php 一个做页面静态化的php类_PHP教程

一个做页面静态化的php类_PHP教程

Jul 13, 2016 am 10:05 AM
statik muka surat

一个做页面静态化的php类

<?php
namespace Common;
/* *
 * 功能:页面静态化的创建和删除
 *      创建:当且仅当,一个页面需要被静态化并且还未静态化时。
 *      删除:当且仅当,一个页面存在静态化页面并且需要被重新静态化时。
 *
 * 作者:郭军周
 *
 * 注 :本类基于ThinkPHP3.2,或者其他具有“单一入口且MVC模式”的其他php框架。
 *
 * 使用方式:在Controller的构造方法中获取其对象;在Controller的销毁方法里,用其对象的_static方法。
 *      例:XXXController extends BaseController.
 *         BaseController:
 *         function __construct(){
 *             $this->__sh = StaticHtml::getInstance();
 *         }
 *         function __destruct(){
 *             $this->__sh->_static();
 *         }
 *
 * */
class StaticHtml{
    private static $_instance = null;   /* 单例模式,自身的引用 */
    private $_needStatic = false;   /* 是否需要将其静态化 */
    private $_needDeleteStatic = false;     /* 是否需要删除其静态化的页面 */
    private $_hasStaticed = true;   /* 是否存在其的静态化页面 */
    private $_controller = null;    /* 当前被访问的controller */
    private $_action = null;        /* 当前被访问的action */
//    private $_staticAgain = false;   /* 删除静态文件后,是否马上重新更新【【注意】再次请求】 */
    private $_save_path = null;     /* 将要创建或者删除的静态文件的路径 */
    private $_conf = array( /* 此文件定义一些静态文件的存放方式 */
        'files_per_directory' => 100        /* 此&#20540;不允许被修改,除非是要删除所有已经存在的静态文件,重新缓存 */
    );
    private $_staticList = array(   /* 此数组,定义了需要创建静态化页面的Controller的action */
//        'Base' => array(      /* Base为controller name */
//            'aaa' => array(       /* aaa为action name */
//                'save_path' => '/StaticHtml/Base/aaa/',   /* save_path为生成的静态文件存放的根路径 */
//                'static_base' => 'id',        /* static_base为生成静态文件的“依据”。建议为对应数据库的primary_key */
//                'alias' => 'aaa'  /* 静态文件的名字,否则为1.html */
//            )
//        )
        'Mynotes' => array(
            'look_notes' => array(
                'save_path' => '/StaticHtml/Mynotes/look_notes/',
                'static_base' => 'id',
                'alias' => 'note'
            ),
            'add_personal_notes' => array(
                'save_path' => '/StaticHtml/Mynotes/',
                'alias' => 'note-add'
            )
        ),
        'Resource' => array(
            'allResource' => array(
                'save_path' => '/StaticHtml/Resource/',
                'alias' => 'allResource'
            ),
            'resource_add' => array(
                'save_path' => '/StaticHtml/Resource/',
                'alias' => 'resourceAdd'
            )
        ),
        'Thing' => array(
            'suggestion_of_lecture' => array(
                'save_path' => '/StaticHtml/Lecture/',
                'alias' => 'voteLecture'
            )
        ),
        'Passwordfix' => array(
            'index' => array(
                'save_path' => '/StaticHtml/Information/',
                'alias' => 'updatePassword'
            )
        ),
        'Information' => array(
            'index' => array(
                'save_path' => '/StaticHtml/Information/',
                'static_base' => 'user_id',
                'alias' => 'information'
            )
        ),
        'Courseinfo' => array(
            'course_show' => array(
                'save_path' => '/StaticHtml/Information/',
                'static_base' => 'user_id',
                'alias' => 'course'
            )
        )
    );
    private $_deleteList = array(   /* 此数组,定义了需要删除某些静态化页面的Controller的action */
//        'Base' => array(      /* Base为controller name */
//            'bbb' => array(       /* bbb为action name */
//                'save_path' => '/StaticHtml/Base/aaa/',   /* save_path为要删除的静态文件存放的根路径 */
//                'static_base' => 'id',        /* static_base为确定静态文件路径的“依据”。建议为对应数据库的primary_key */
//                'alias' => 'aaa'  /* 静态文件的名字,否则为1.html */
//            )
//        )
        'Mynotes' => array(
            'edits_notes' => array(
                'save_path' => '/StaticHtml/Mynotes/look_notes/',
                'static_base' => 'id',
                'alias' => 'note'
            )
        ),
        'Information' => array(
            'save_user_info' => array(
                'save_path' => '/StaticHtml/Information/',
                'static_base' => 'user_id',
                'alias' => 'information'
            )
        ),
        'Courseinfo' => array(
            'course_update' => array(
                'save_path' => '/StaticHtml/Information/',
                'static_base' => 'user_id',
                'alias' => 'course'
            )
        )
    );
    private function __construct(){
        $this->needStatic(); /* 确定本次请求是否需要静态化 */
        $this->hasStaticed(); /* 确定本次请求是否已经存在静态化页面 */
        $this->needDeleteStatic(); /* 确定本次请求是否需要删除某些静态页面 */
    }
    /* 确定需要删除的静态文件的存放路径 */
    private function needDeleteStatic(){
        if($this->_needDeleteStatic){
            $save_path = $this->getSavePath($this->_deleteList[$this->_controller][$this->_action]);
            $this->_hasStaticed = false;
            if(file_exists(ROOT_PATH.$save_path)){
                $this->_hasStaticed = true;
            }
//            $this->_staticAgain = $this->_deleteList[$this->_controller][$this->_action]['visitAgain'];
            $this->_save_path = ROOT_PATH.$save_path;
        }
    }
    /* 获取本类的,唯一的,实例化 */
    public static function getInstance(){
        if(!(self::$_instance instanceof self)){
            self::$_instance = new self();
        }
        return self::$_instance;
    }
    /* 判断是否存在其静态化的文件 */
    private function hasStaticed(){
        if($this->_needStatic){
            $save_path = $this->getSavePath($this->_staticList[$this->_controller][$this->_action]);
            if(!file_exists(ROOT_PATH.$save_path)){
                $this->_hasStaticed = false;
                ob_start();
            }else{
                header("location: http://".$_SERVER['HTTP_HOST'].dirname($_SERVER['SCRIPT_NAME']).$save_path);
            }
            $this->_save_path = ROOT_PATH.$save_path;
        }
    }
    /* 获取本次请求要生成或者删除的,静态化文件的路径 */
    private function getSavePath($conf){
        if(!isset($conf['static_base'])){
            $save_path = $conf['save_path'];
            $save_path .= $conf['alias'].'.html';
        }else{
            if($conf['static_base'] == 'user_id'){
                $id = (int)$_SESSION['logined_user']['id'];
            }else{
                if(IS_GET){
                    $id = $_GET[$conf['static_base']];
                }else{
                    $id =  $_POST[$conf['static_base']];
                }
            }
            $save_path = $conf['save_path'];
            $directory_id = ceil($id/$this->_conf['files_per_directory']);
            $save_path .= $directory_id.'/';
            if($conf['alias']){
                $fileName = $conf['alias'].'-';
            }
            $fileName .= $id.'.html';
            $save_path .= $fileName;
        }
        return $save_path;
    }
    /* 确定本次请求,是否需要生成静态化文件 */
    private function needStatic(){
        $url = explode('/',__ACTION__);
        $this->_controller = $url[4];
        $this->_action = $url[5];
        if(isset($this->_staticList[$this->_controller]) && isset($this->_staticList[$this->_controller][$this->_action])){
            $this->_needStatic = true;
        }
        if(isset($this->_deleteList[$this->_controller]) && isset($this->_deleteList[$this->_controller][$this->_action])){
            $this->_needDeleteStatic = true;
        }
    }
    /* 生成,或者删除,静态化文件 */
    public function _static(){
        if($this->_needStatic && !$this->_hasStaticed){
            $html = ob_get_contents();
            $this->_mkdir(dirname($this->_save_path));
            file_put_contents($this->_save_path,$html);
        }
        if($this->_needDeleteStatic && $this->_hasStaticed){
            unlink($this->_save_path);
            /*if($this->_staticAgain){
                header("location: http://www.baidu.com");
//                header("location: http://".$_SERVER['HTTP_HOST'].'/'.$_SERVER['REQUEST_URI']);
            }*/
        }
    }
    /* 创建目录 */
    private function _mkdir($path){
        if (!file_exists($path)){
            $this->_mkdir(dirname($path));
            mkdir($path, 0777);
        }
    }
}
?>
Salin selepas log masuk

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/963687.htmlTechArticle一个做页面静态化的php类 __sh = StaticHtml::getInstance(); * } * function __destruct(){ * $this->__sh->_static(); * } * * */class StaticHtml{ private static $_instance = n...
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Bagaimana untuk menyalin halaman dalam Word Bagaimana untuk menyalin halaman dalam Word Feb 20, 2024 am 10:09 AM

Ingin menyalin halaman dalam Microsoft Word dan mengekalkan pemformatan? Ini adalah idea yang bijak kerana menduplikasi halaman dalam Word boleh menjadi teknik penjimatan masa yang berguna apabila anda ingin membuat berbilang salinan susun atur atau format dokumen tertentu. Panduan ini akan membimbing anda melalui proses langkah demi langkah menyalin halaman dalam Word, sama ada membuat templat atau menyalin halaman tertentu dalam dokumen. Arahan mudah ini direka untuk membantu anda mencipta semula halaman anda dengan mudah tanpa perlu bermula dari awal. Mengapa menyalin halaman dalam Microsoft Word? Terdapat beberapa sebab mengapa menyalin halaman dalam Word sangat bermanfaat: Apabila anda mempunyai dokumen dengan susun atur atau format tertentu yang anda ingin salin. Tidak seperti mencipta semula keseluruhan halaman dari awal

Cara menyesuaikan dan mengedit mod siap sedia pada iPhone: Perkara baharu dalam iOS 17 Cara menyesuaikan dan mengedit mod siap sedia pada iPhone: Perkara baharu dalam iOS 17 Sep 21, 2023 pm 04:01 PM

Siap sedia ialah ciri baharu dalam kemas kini iOS 17 yang menyediakan cara baharu dan dipertingkat untuk mengakses maklumat apabila telefon anda melahu dengan cepat. Dengan StandBy, anda boleh menyemak masa dengan mudah, melihat acara akan datang, menyemak imbas kalendar anda, mendapatkan kemas kini cuaca untuk lokasi anda dan banyak lagi. Setelah diaktifkan, iPhone secara intuitif akan memasuki mod siap sedia apabila ditetapkan kepada landskap semasa mengecas. Ciri ini sesuai untuk titik pengecasan wayarles seperti meja malam anda, atau apabila anda berada jauh dari pengecasan iPhone anda semasa tugasan harian. Ia membolehkan anda meleret melalui pelbagai widget yang dipaparkan dalam bersedia untuk mengakses set maklumat yang berbeza daripada pelbagai aplikasi. Walau bagaimanapun, anda mungkin ingin mengubah suai widget ini atau memadam beberapa berdasarkan keutamaan anda dan maklumat yang anda perlukan dengan kerap. Jadi mari kita selami

Bagaimana untuk memuat semula halaman web dengan cepat? Bagaimana untuk memuat semula halaman web dengan cepat? Feb 18, 2024 pm 01:14 PM

Penyegaran halaman adalah perkara biasa dalam penggunaan rangkaian harian kami Apabila kami melawat halaman web, kadangkala kami menghadapi beberapa masalah, seperti halaman web tidak dimuatkan atau dipaparkan secara tidak normal, dsb. Pada masa ini, kami biasanya memilih untuk memuat semula halaman untuk menyelesaikan masalah, jadi bagaimana untuk memuat semula halaman dengan cepat? Mari kita bincangkan kekunci pintasan untuk muat semula halaman. Kekunci pintasan muat semula halaman ialah kaedah untuk memuat semula halaman web semasa dengan pantas melalui operasi papan kekunci. Dalam sistem pengendalian dan penyemak imbas yang berbeza, kekunci pintasan untuk muat semula halaman mungkin berbeza. Di bawah ini kami menggunakan W biasa

Cara Susun Semula, Lumpuhkan dan Padam Halaman Skrin Utama iPhone Cara Susun Semula, Lumpuhkan dan Padam Halaman Skrin Utama iPhone Nov 29, 2023 am 08:22 AM

Dalam iOS, Apple membenarkan anda melumpuhkan halaman skrin utama individu pada iPhone anda. Anda juga boleh menyusun semula susunan halaman skrin utama dan memadamkan halaman secara langsung dan bukannya melumpuhkannya sahaja. Begini cara ia berfungsi. Cara Menyusun Semula Halaman Skrin Utama Sentuh dan tahan Ruang pada skrin Utama untuk memasuki mod jitter. Ketik baris titik yang mewakili halaman skrin Utama. Dalam grid Skrin Utama yang muncul, sentuh dan seret halaman untuk menyusunnya semula berbanding dengan halaman lain. Orang lain bergerak sebagai tindak balas kepada penyeretan anda. Apabila anda berpuas hati dengan susunan baharu anda, ketik "Selesai" di penjuru kanan sebelah atas skrin, kemudian ketik "Selesai" sekali lagi untuk keluar dari mod dither. Cara Melumpuhkan atau Mengalih Keluar Halaman Skrin Utama Sentuh dan tahan Ruang pada skrin Utama untuk memasuki mod dither. Ketik untuk mewakili skrin utama

Bagaimana untuk melaksanakan lompatan halaman dalam 3 saat: Panduan Pengaturcaraan PHP Bagaimana untuk melaksanakan lompatan halaman dalam 3 saat: Panduan Pengaturcaraan PHP Mar 25, 2024 am 10:42 AM

Tajuk: Kaedah pelaksanaan lompat halaman dalam 3 saat: Panduan Pengaturcaraan PHP Dalam pembangunan web, lompat halaman adalah operasi biasa Secara umumnya, kami menggunakan tag meta dalam kaedah HTML atau JavaScript untuk melompat ke halaman. Walau bagaimanapun, dalam beberapa kes tertentu, kita perlu melakukan lompatan halaman pada bahagian pelayan. Artikel ini akan memperkenalkan cara menggunakan pengaturcaraan PHP untuk melaksanakan fungsi yang secara automatik melompat ke halaman tertentu dalam masa 3 saat, dan juga akan memberikan contoh kod tertentu. Prinsip asas lompat halaman menggunakan PHP adalah sejenis

Bagaimana untuk menangani masalah yang halaman Laravel tidak dapat memaparkan CSS dengan betul Bagaimana untuk menangani masalah yang halaman Laravel tidak dapat memaparkan CSS dengan betul Mar 10, 2024 am 11:33 AM

"Bagaimana untuk menangani kegagalan halaman Laravel untuk memaparkan CSS dengan betul, contoh kod khusus diperlukan" Apabila menggunakan rangka kerja Laravel untuk membangunkan aplikasi web, kadangkala anda akan menghadapi masalah bahawa halaman tidak dapat memaparkan gaya CSS dengan betul, yang boleh menyebabkan halaman untuk menghasilkan gaya yang tidak normal. Artikel ini akan memperkenalkan beberapa kaedah untuk menangani kegagalan halaman Laravel untuk memaparkan CSS dengan betul, dan menyediakan contoh kod khusus untuk membantu pembangun menyelesaikan masalah biasa ini. 1. Semak laluan fail Mula-mula semak laluan fail CSS.

Analisis mendalam tentang peranan dan penggunaan kata kunci statik dalam bahasa C Analisis mendalam tentang peranan dan penggunaan kata kunci statik dalam bahasa C Feb 20, 2024 pm 04:30 PM

Analisis mendalam tentang peranan dan penggunaan kata kunci statik dalam bahasa C Dalam bahasa C, statik ialah kata kunci yang sangat penting, yang boleh digunakan dalam definisi fungsi, pembolehubah dan jenis data. Menggunakan kata kunci statik boleh menukar atribut pautan, skop dan kitaran hayat objek Mari analisa peranan dan penggunaan kata kunci statik dalam bahasa C secara terperinci. Pembolehubah statik dan fungsi: Pembolehubah yang ditakrifkan menggunakan kata kunci statik di dalam fungsi dipanggil pembolehubah statik, yang mempunyai kitaran hayat global

Gunakan ThinkPHP6 untuk melaksanakan halaman 404 yang cantik Gunakan ThinkPHP6 untuk melaksanakan halaman 404 yang cantik Jun 20, 2023 am 11:06 AM

Apabila Internet berkembang, banyak laman web atau aplikasi secara beransur-ansur menjadi lebih kompleks. Apabila pengguna menggunakannya, mereka sering menghadapi halaman ralat, yang paling biasa ialah halaman 404. Halaman 404 bermakna halaman yang diakses tidak wujud dan merupakan halaman ralat biasa. Untuk tapak web atau aplikasi, halaman 404 yang cantik boleh meningkatkan pengalaman pengguna dengan ketara. Dalam artikel ini, kami akan memperkenalkan cara menggunakan ThinkPHP6 untuk melaksanakan halaman 404 yang cantik dengan cepat. Cipta laluan Pertama, kita perlu mencipta ralat dalam folder laluan

See all articles