0

0

Codeigniter 生成静态页面_PHP教程

php中文网

php中文网

发布时间:2016-07-14 10:09:06

|

1210人浏览过

|

来源于php中文网

原创

    使用CI来生成静态页面,其实很简单,就像论坛里面说的那样,读出页面中的数据,再写入html文件中,最后显示这个html文件就行了,好吧,上码。

 
 
[php] 
                
class MY_Loader extends CI_Loader {  
                    
    public function m_view($view, $vars = array(), $return = FALSE){  
        return $this->_m_ci_load(array('_ci_view' => $view, '_ci_vars' => $this->_ci_object_to_array($vars), '_ci_return' => $return));  
    }  
                    
    protected function _m_ci_load($_ci_data){  
          .....  
                      
            $_ci_html_file=($_ci_ext==='')? $_ci_view.".html" : $_ci_view;//这,生成静态页面的文件名   
                            
            foreach ($this->_ci_view_paths as $_ci_view_file => $cascade){  
                if (file_exists($_ci_view_file.$_ci_file)){  
                    $_ci_path = $_ci_view_file.$_ci_file;  
                    $_ci_html_path=$_ci_view_file.$_ci_html_file;//生成静态页面的路径   
                    $file_exists = TRUE;  
                    break;  
                }  
      ......  
            }  
        }  
                
     .......  
        //在这   
      if(config_item("html")===TRUE){//是否开启生成静态页面   
            $_html_file=@fopen($_ci_html_path,'r');//创建.html文件   
            $buffer = ob_get_contents();  
            @ob_end_clean();  
            if(!$_html_file||(@filesize($_ci_html_path)!=strlen($buffer))){ //如果文件不存在或文件已更变   
                $_html_file=@fopen($_ci_html_path,'w');  
                flock($_html_file, LOCK_EX);  
                fwrite($_html_file, $buffer);                    
                flock($_html_file, LOCK_UN);  
                fclose($_html_file);  
            }  
            //echo(filesize($_ci_html_path)."-".strlen($buffer));   
            include($_ci_html_path);  
        }  
                            
   ......  
    }    
}  
 
              
class MY_Loader extends CI_Loader {
                  
    public function m_view($view, $vars = array(), $return = FALSE){
        return $this->_m_ci_load(array('_ci_view' => $view, '_ci_vars' => $this->_ci_object_to_array($vars), '_ci_return' => $return));
    }
                  
    protected function _m_ci_load($_ci_data){
          .....
                    
            $_ci_html_file=($_ci_ext==='')? $_ci_view.".html" : $_ci_view;//这,生成静态页面的文件名
                          
            foreach ($this->_ci_view_paths as $_ci_view_file => $cascade){
                if (file_exists($_ci_view_file.$_ci_file)){
                    $_ci_path = $_ci_view_file.$_ci_file;
                    $_ci_html_path=$_ci_view_file.$_ci_html_file;//生成静态页面的路径
                    $file_exists = TRUE;
                    break;
                }
      ......
            }
        }
              
     .......
        //在这
      if(config_item("html")===TRUE){//是否开启生成静态页面
            $_html_file=@fopen($_ci_html_path,'r');//创建.html文件
            $buffer = ob_get_contents();
            @ob_end_clean();
            if(!$_html_file||(@filesize($_ci_html_path)!=strlen($buffer))){ //如果文件不存在或文件已更变
                $_html_file=@fopen($_ci_html_path,'w');
                flock($_html_file, LOCK_EX);
                fwrite($_html_file, $buffer);                  
                flock($_html_file, LOCK_UN);
                fclose($_html_file);
            }
            //echo(filesize($_ci_html_path)."-".strlen($buffer));
            include($_ci_html_path);
        }
                          
   ......
    }  
}调用
 
 
[html]  
$this->load->m_view('login',$datas);  
 
$this->load->m_view('login',$datas);
是否生成HTML文件
 
$config["html"]                =  TRUE;
 
 
 
 
全部代码如下
 
 
[php] 
         
class MY_Loader extends CI_Loader {  
             
    public function m_view($view, $vars = array(), $return = FALSE){  
        return $this->_m_ci_load(array('_ci_view' => $view, '_ci_vars' => $this->_ci_object_to_array($vars), '_ci_return' => $return));  
    }  
             
    protected function _m_ci_load($_ci_data){  
        // Set the default data variables   
        foreach (array('_ci_view', '_ci_vars', '_ci_path', '_ci_return') as $_ci_val){  
            $$_ci_val = isset($_ci_data[$_ci_val]) ? $_ci_data[$_ci_val] : FALSE;  
        }  
         
        $file_exists = FALSE;  
        // Set the path to the requested file   
        if (is_string($_ci_path) && $_ci_path !== ''){  
            $_ci_x = explode('/', $_ci_path);//使用一个字符串分割另一个字符串   
            $_ci_file = end($_ci_x);//将数组的内部指针指向最后一个单元   
        }else{  
            $_ci_ext = pathinfo($_ci_view, PATHINFO_EXTENSION);// 返回文件路径的信息   
            $_ci_file = ($_ci_ext === '') ? $_ci_view.'.php' : $_ci_view;  
            $_ci_html_file=($_ci_ext==='')? $_ci_view.".html" : $_ci_view;//这,生成静态页面的文件名   
                     
            foreach ($this->_ci_view_paths as $_ci_view_file => $cascade){  
                if (file_exists($_ci_view_file.$_ci_file)){  
                    $_ci_path = $_ci_view_file.$_ci_file;  
                    $_ci_html_path=$_ci_view_file.$_ci_html_file;//生成静态页面的路径   
                    $file_exists = TRUE;  
                    break;  
                }  
         
                if ( ! $cascade){  
                    break;  
                }  
            }  
        }  
         
        if ( ! $file_exists && ! file_exists($_ci_path))  
        {  
            show_error('Unable to load the requested file: '.$_ci_file);  
        }  
         
        // This allows anything loaded using $this->load (views, files, etc.)   
        // to become accessible from within the Controller and Model functions.   
        $_ci_CI =& get_instance();  
        foreach (get_object_vars($_ci_CI) as $_ci_key => $_ci_var)  
        {  
            if ( ! isset($this->$_ci_key))  
            {  
                $this->$_ci_key =& $_ci_CI->$_ci_key;  
            }  
        }  
         
        /* 
         * Extract and cache variables 
         * 
         * You can either set variables using the dedicated $this->load->vars() 
         * function or via the second parameter of this function. We'll merge 
         * the two types and cache them so that views that are embedded within 
         * other views can have access to these variables. 
         */  
        if (is_array($_ci_vars))  
        {  
            $this->_ci_cached_vars = array_merge($this->_ci_cached_vars, $_ci_vars);  
        }  
        extract($this->_ci_cached_vars);  
         
        /* 
         * Buffer the output 
         * 
         * We buffer the output for two reasons: 
         * 1. Speed. You get a significant speed boost. 
         * 2. So that the final rendered template can be post-processed by 
         *  the output class. Why do we need post processing? For one thing, 
         *  in order to show the elapsed page load time. Unless we can 
         *  intercept the content right before it's sent to the browser and 
         *  then stop the timer it won't be accurate. 
         */  
        ob_start();  
         
        // If the PHP installation does not support short tags we'll   
        // do a little string replacement, changing the short tags   
        // to standard PHP echo statements.   
        if ( ! is_php('5.4') && (bool) @ini_get('short_open_tag') === FALSE  
            && config_item('rewrite_short_tags') === TRUE && function_usable('eval')  
        )  
        {  
            echo eval('?>'.preg_replace('/;*\s*\?>/', '; ?>', str_replace('=', '
        }  
        else  
        {  
            include($_ci_path); // include() vs include_once() allows for multiple views with the same name   
        }  
         
        log_message('debug', 'File loaded: '.$_ci_path);  
         
        // Return the file data if requested   
        if ($_ci_return === TRUE)  
        {  
            $buffer = ob_get_contents();  
            @ob_end_clean();  
            return $buffer;  
        }  
        //在这   
         if(config_item("html")===TRUE){//是否开启生成静态页面   
            $_html_file=@fopen($_ci_html_path,'r');//创建.html文件   
            $buffer = ob_get_contents();  
            @ob_end_clean();  
            if(!$_html_file||(@filesize($_ci_html_path)!=strlen($buffer))){  
                       $_html_file=@fopen($_ci_html_path,'w');  
                       flock($_html_file, LOCK_EX);  
                fwrite($_html_file, $buffer);                    
                flock($_html_file, LOCK_UN);  
                fclose($_html_file);  
            }  
            //echo(filesize($_ci_html_path)."-".strlen($buffer));   
            include($_ci_html_path);  
        }  
                     
         
        /* 
         * Flush the buffer... or buff the flusher? 
         * 
         * In order to permit views to be nested within 
         * other views, we need to flush the content back out whenever 
         * we are beyond the first level of output buffering so that 
         * it can be seen and included properly by the first included 
         * template and any subsequent ones. Oy! 
         */  
        if (ob_get_level() > $this->_ci_ob_level + 1)  
        {  
            ob_end_flush();  
        }  
        else  
        {  
            $_ci_CI->output->append_output(ob_get_contents());  
            @ob_end_clean();  
        }  
    }    
}  
 
       
class MY_Loader extends CI_Loader {
           
    public function m_view($view, $vars = array(), $return = FALSE){
        return $this->_m_ci_load(array('_ci_view' => $view, '_ci_vars' => $this->_ci_object_to_array($vars), '_ci_return' => $return));
    }
           
    protected function _m_ci_load($_ci_data){
        // Set the default data variables
        foreach (array('_ci_view', '_ci_vars', '_ci_path', '_ci_return') as $_ci_val){
            $$_ci_val = isset($_ci_data[$_ci_val]) ? $_ci_data[$_ci_val] : FALSE;
        }
       
        $file_exists = FALSE;
        // Set the path to the requested file
        if (is_string($_ci_path) && $_ci_path !== ''){
            $_ci_x = explode('/', $_ci_path);//使用一个字符串分割另一个字符串
            $_ci_file = end($_ci_x);//将数组的内部指针指向最后一个单元
        }else{
            $_ci_ext = pathinfo($_ci_view, PATHINFO_EXTENSION);// 返回文件路径的信息
            $_ci_file = ($_ci_ext === '') ? $_ci_view.'.php' : $_ci_view;
            $_ci_html_file=($_ci_ext==='')? $_ci_view.".html" : $_ci_view;//这,生成静态页面的文件名
                   
            foreach ($this->_ci_view_paths as $_ci_view_file => $cascade){
                if (file_exists($_ci_view_file.$_ci_file)){
                    $_ci_path = $_ci_view_file.$_ci_file;
                    $_ci_html_path=$_ci_view_file.$_ci_html_file;//生成静态页面的路径
                    $file_exists = TRUE;
                    break;
                }
       
                if ( ! $cascade){
                    break;
                }
            }
        }
       
        if ( ! $file_exists && ! file_exists($_ci_path))
        {
            show_error('Unable to load the requested file: '.$_ci_file);
        }
       
        // This allows anything loaded using $this->load (views, files, etc.)
        // to become accessible from within the Controller and Model functions.
        $_ci_CI =& get_instance();
        foreach (get_object_vars($_ci_CI) as $_ci_key => $_ci_var)
        {
            if ( ! isset($this->$_ci_key))
            {
                $this->$_ci_key =& $_ci_CI->$_ci_key;
            }
        }
       
        /*
         * Extract and cache variables
         *
         * You can either set variables using the dedicated $this->load->vars()
         * function or via the second parameter of this function. We'll merge
         * the two types and cache them so that views that are embedded within
         * other views can have access to these variables.
         */
        if (is_array($_ci_vars))
        {
            $this->_ci_cached_vars = array_merge($this->_ci_cached_vars, $_ci_vars);
        }
        extract($this->_ci_cached_vars);
       
        /*
         * Buffer the output
         *
         * We buffer the output for two reasons:
         * 1. Speed. You get a significant speed boost.
         * 2. So that the final rendered template can be post-processed by
         *  the output class. Why do we need post processing? For one thing,
         *  in order to show the elapsed page load time. Unless we can
         *  intercept the content right before it's sent to the browser and
         *  then stop the timer it won't be accurate.
         */
        ob_start();
       
        // If the PHP installation does not support short tags we'll
        // do a little string replacement, changing the short tags
        // to standard PHP echo statements.
        if ( ! is_php('5.4') && (bool) @ini_get('short_open_tag') === FALSE
            && config_item('rewrite_short_tags') === TRUE && function_usable('eval')
        )
        {
            echo eval('?>'.preg_replace('/;*\s*\?>/', '; ?>', str_replace('=', '
        }
        else
        {
            include($_ci_path); // include() vs include_once() allows for multiple views with the same name
        }
       
        log_message('debug', 'File loaded: '.$_ci_path);
       
        // Return the file data if requested
        if ($_ci_return === TRUE)
        {
            $buffer = ob_get_contents();
            @ob_end_clean();
            return $buffer;
        }
        //在这
         if(config_item("html")===TRUE){//是否开启生成静态页面
            $_html_file=@fopen($_ci_html_path,'r');//创建.html文件
            $buffer = ob_get_contents();
            @ob_end_clean();
            if(!$_html_file||(@filesize($_ci_html_path)!=strlen($buffer))){
                       $_html_file=@fopen($_ci_html_path,'w');
                       flock($_html_file, LOCK_EX);
                fwrite($_html_file, $buffer);                  
                flock($_html_file, LOCK_UN);
                fclose($_html_file);
            }
            //echo(filesize($_ci_html_path)."-".strlen($buffer));
            include($_ci_html_path);
        }
                   
       
        /*
         * Flush the buffer... or buff the flusher?
         *
         * In order to permit views to be nested within
         * other views, we need to flush the content back out whenever
         * we are beyond the first level of output buffering so that
         * it can be seen and included properly by the first included
         * template and any subsequent ones. Oy!
         */ www.2cto.com
        if (ob_get_level() > $this->_ci_ob_level + 1)
        {
            ob_end_flush();
        }
        else
        {
            $_ci_CI->output->append_output(ob_get_contents());
            @ob_end_clean();
        }
    }  
}
 

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/477728.htmlTechArticle使用CI来生成静态页面,其实很简单,就像论坛里面说的那样,读出页面中的数据,再写入html文件中,最后显示这个html文件就行了,好吧,上码。...

相关文章

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法

本专题系统整理pixiv网页版官网入口及登录访问方式,涵盖官网登录页面直达路径、在线阅读入口及快速进入方法说明,帮助用户高效找到pixiv官方网站,实现便捷、安全的网页端浏览与账号登录体验。

705

2026.02.13

微博网页版主页入口与登录指南_官方网页端快速访问方法
微博网页版主页入口与登录指南_官方网页端快速访问方法

本专题系统整理微博网页版官方入口及网页端登录方式,涵盖首页直达地址、账号登录流程与常见访问问题说明,帮助用户快速找到微博官网主页,实现便捷、安全的网页端登录与内容浏览体验。

233

2026.02.13

Flutter跨平台开发与状态管理实战
Flutter跨平台开发与状态管理实战

本专题围绕Flutter框架展开,系统讲解跨平台UI构建原理与状态管理方案。内容涵盖Widget生命周期、路由管理、Provider与Bloc状态管理模式、网络请求封装及性能优化技巧。通过实战项目演示,帮助开发者构建流畅、可维护的跨平台移动应用。

117

2026.02.13

TypeScript工程化开发与Vite构建优化实践
TypeScript工程化开发与Vite构建优化实践

本专题面向前端开发者,深入讲解 TypeScript 类型系统与大型项目结构设计方法,并结合 Vite 构建工具优化前端工程化流程。内容包括模块化设计、类型声明管理、代码分割、热更新原理以及构建性能调优。通过完整项目示例,帮助开发者提升代码可维护性与开发效率。

22

2026.02.13

Redis高可用架构与分布式缓存实战
Redis高可用架构与分布式缓存实战

本专题围绕 Redis 在高并发系统中的应用展开,系统讲解主从复制、哨兵机制、Cluster 集群模式及数据分片原理。内容涵盖缓存穿透与雪崩解决方案、分布式锁实现、热点数据优化及持久化策略。通过真实业务场景演示,帮助开发者构建高可用、可扩展的分布式缓存系统。

61

2026.02.13

c语言 数据类型
c语言 数据类型

本专题整合了c语言数据类型相关内容,阅读专题下面的文章了解更多详细内容。

30

2026.02.12

雨课堂网页版登录入口与使用指南_官方在线教学平台访问方法
雨课堂网页版登录入口与使用指南_官方在线教学平台访问方法

本专题系统整理雨课堂网页版官方入口及在线登录方式,涵盖账号登录流程、官方直连入口及平台访问方法说明,帮助师生用户快速进入雨课堂在线教学平台,实现便捷、高效的课程学习与教学管理体验。

15

2026.02.12

豆包AI网页版入口与智能创作指南_官方在线写作与图片生成使用方法
豆包AI网页版入口与智能创作指南_官方在线写作与图片生成使用方法

本专题汇总豆包AI官方网页版入口及在线使用方式,涵盖智能写作工具、图片生成体验入口和官网登录方法,帮助用户快速直达豆包AI平台,高效完成文本创作与AI生图任务,实现便捷智能创作体验。

669

2026.02.12

PostgreSQL性能优化与索引调优实战
PostgreSQL性能优化与索引调优实战

本专题面向后端开发与数据库工程师,深入讲解 PostgreSQL 查询优化原理与索引机制。内容包括执行计划分析、常见索引类型对比、慢查询优化策略、事务隔离级别以及高并发场景下的性能调优技巧。通过实战案例解析,帮助开发者提升数据库响应速度与系统稳定性。

58

2026.02.12

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
CodeIgniter3(CI3)基础教程(全)
CodeIgniter3(CI3)基础教程(全)

共37课时 | 4.8万人学习

Codeigniter 3 中文开发手册
Codeigniter 3 中文开发手册

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号