Table des matières
一个做页面静态化的php类
Maison développement back-end tutoriel php 一个做页面静态化的php类_PHP教程

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

Jul 13, 2016 am 10:05 AM
statique 页面

一个做页面静态化的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);
        }
    }
}
?>
Copier après la connexion

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/963687.htmlTechArticle一个做页面静态化的php类 __sh = StaticHtml::getInstance(); * } * function __destruct(){ * $this->__sh->_static(); * } * * */class StaticHtml{ private static $_instance = n...
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment copier une page dans Word Comment copier une page dans Word Feb 20, 2024 am 10:09 AM

Vous souhaitez copier une page dans Microsoft Word et conserver la mise en forme intacte ? C'est une bonne idée car la duplication de pages dans Word peut être une technique utile pour gagner du temps lorsque vous souhaitez créer plusieurs copies d'une mise en page ou d'un format de document spécifique. Ce guide vous guidera pas à pas à travers le processus de copie de pages dans Word, que vous créiez un modèle ou que vous copiez une page spécifique dans un document. Ces instructions simples sont conçues pour vous aider à recréer facilement votre page sans avoir à repartir de zéro. Pourquoi copier des pages dans Microsoft Word ? Il existe plusieurs raisons pour lesquelles copier des pages dans Word est très bénéfique : Lorsque vous souhaitez copier un document avec une mise en page ou un format spécifique. Contrairement à la recréation de la page entière à partir de zéro

Comment personnaliser et modifier le mode veille sur iPhone : nouveautés d'iOS 17 Comment personnaliser et modifier le mode veille sur iPhone : nouveautés d'iOS 17 Sep 21, 2023 pm 04:01 PM

La veille est une nouvelle fonctionnalité de la mise à jour iOS 17 qui offre un moyen nouveau et amélioré d'accéder aux informations lorsque votre téléphone est rapidement inactif. Avec StandBy, vous pouvez facilement vérifier l'heure, afficher les événements à venir, parcourir votre calendrier, obtenir des mises à jour météo pour votre emplacement, et bien plus encore. Une fois activé, l’iPhone entrera intuitivement en mode veille lorsqu’il sera réglé en mode paysage pendant le chargement. Cette fonctionnalité est parfaite pour les points de chargement sans fil comme votre table de chevet, ou lorsque vous êtes loin de charger votre iPhone pendant les tâches quotidiennes. Il vous permet de parcourir différents widgets affichés en veille pour accéder à différents ensembles d'informations provenant de diverses applications. Cependant, vous souhaiterez peut-être modifier ces widgets ou même en supprimer certains en fonction de vos préférences et des informations dont vous avez fréquemment besoin. Alors plongeons-nous dans

Comment actualiser rapidement une page Web ? Comment actualiser rapidement une page Web ? Feb 18, 2024 pm 01:14 PM

L'actualisation des pages est très courante dans notre utilisation quotidienne du réseau. Lorsque nous visitons une page Web, nous rencontrons parfois certains problèmes, comme la page Web qui ne se charge pas ou ne s'affiche pas anormalement, etc. À ce stade, nous choisissons généralement d'actualiser la page pour résoudre le problème, alors comment actualiser la page rapidement ? Discutons des touches de raccourci pour l'actualisation de la page. La touche de raccourci d'actualisation de page est une méthode permettant d'actualiser rapidement la page Web actuelle via des opérations au clavier. Dans différents systèmes d'exploitation et navigateurs, les touches de raccourci pour l'actualisation de la page peuvent être différentes. Ci-dessous, nous utilisons le W commun

Comment réorganiser, désactiver et supprimer les pages de l'écran d'accueil de l'iPhone Comment réorganiser, désactiver et supprimer les pages de l'écran d'accueil de l'iPhone Nov 29, 2023 am 08:22 AM

Sous iOS, Apple vous permet de désactiver les pages individuelles de l'écran d'accueil de votre iPhone. Il est également possible de réorganiser l'ordre des pages de l'écran d'accueil et de supprimer des pages directement au lieu de simplement les désactiver. Voici comment cela fonctionne. Comment réorganiser les pages de l'écran d'accueil Touchez et maintenez Espace sur l'écran d'accueil pour passer en mode instabilité. Appuyez sur la rangée de points qui représentent les pages de l'écran d'accueil. Dans la grille de l'écran d'accueil qui apparaît, touchez et faites glisser une page pour la réorganiser par rapport aux autres pages. D'autres bougent en réponse à votre déplacement. Lorsque vous êtes satisfait de votre nouvel arrangement, appuyez sur « Terminé » dans le coin supérieur droit de l'écran, puis appuyez à nouveau sur « Terminé » pour quitter le mode de tramage. Comment désactiver ou supprimer des pages de l'écran d'accueil Touchez et maintenez Espace sur l'écran d'accueil pour passer en mode tramage. Appuyez pour représenter l'écran d'accueil

Comment implémenter le saut de page en 3 secondes : Guide de programmation PHP Comment implémenter le saut de page en 3 secondes : Guide de programmation PHP Mar 25, 2024 am 10:42 AM

Titre : Méthode d'implémentation du saut de page en 3 secondes : Guide de programmation PHP Dans le développement web, le saut de page est une opération courante. Généralement, nous utilisons des balises méta dans les méthodes HTML ou JavaScript pour accéder aux pages. Cependant, dans certains cas précis, nous devons effectuer des sauts de page côté serveur. Cet article expliquera comment utiliser la programmation PHP pour implémenter une fonction qui accède automatiquement à une page spécifiée dans les 3 secondes, et donnera également des exemples de code spécifiques. Le principe de base du saut de page en utilisant PHP PHP est une sorte de.

Comment résoudre le problème selon lequel la page Laravel ne peut pas afficher correctement le CSS Comment résoudre le problème selon lequel la page Laravel ne peut pas afficher correctement le CSS Mar 10, 2024 am 11:33 AM

"Comment gérer l'échec des pages Laravel à afficher correctement les CSS, des exemples de code spécifiques sont requis" Lorsque vous utilisez le framework Laravel pour développer des applications Web, vous rencontrerez parfois le problème que la page ne peut pas afficher correctement les styles CSS, ce qui peut provoquer le page pour afficher des styles anormaux. Affecte l’expérience utilisateur. Cet article présentera quelques méthodes pour gérer l'échec des pages Laravel à afficher correctement le CSS et fournira des exemples de code spécifiques pour aider les développeurs à résoudre ce problème courant. 1. Vérifiez le chemin du fichier. Vérifiez d’abord le chemin du fichier CSS.

Utilisez ThinkPHP6 pour implémenter une belle page 404 Utilisez ThinkPHP6 pour implémenter une belle page 404 Jun 20, 2023 am 11:06 AM

À mesure qu’Internet se développe, de nombreux sites Web ou applications sont progressivement devenus plus complexes. Lorsque les utilisateurs l’utilisent, ils rencontrent souvent des pages d’erreur, dont la plus courante est la page 404. La page 404 signifie que la page consultée n’existe pas et constitue une page d’erreur courante. Pour les sites Web ou les applications, une belle page 404 peut grandement améliorer l’expérience utilisateur. Dans cet article, nous présenterons comment utiliser ThinkPHP6 pour implémenter rapidement une belle page 404. Créer une route Tout d'abord, nous devons créer une erreur dans le dossier route

Analyse approfondie du rôle et de l'utilisation du mot-clé static en langage C Analyse approfondie du rôle et de l'utilisation du mot-clé static en langage C Feb 20, 2024 pm 04:30 PM

Analyse approfondie du rôle et de l'utilisation du mot-clé static en langage C. En langage C, static est un mot-clé très important, qui peut être utilisé dans la définition de fonctions, de variables et de types de données. L'utilisation du mot-clé static peut modifier les attributs de lien, la portée et le cycle de vie de l'objet. Analysons en détail le rôle et l'utilisation du mot-clé static en langage C. Variables et fonctions statiques : les variables définies à l'aide du mot-clé static à l'intérieur d'une fonction sont appelées variables statiques et ont un cycle de vie global.

See all articles