依照PHP生成静态页的兑现格局_php实例_脚本之家

by admin on 2019年11月26日

本文实例讲述了CodeIgniter生成静态页的方法。分享给大家供大家参考,具体如下:

t1.php复制代码 代码如下:

原来地址:

本文实例讲述了CodeIgniter基于Email类发邮件的方法。分享给大家供大家参考,具体如下:

因为每次用户点击动态链接的时候都会对服务器发送数据查询的要求,对于一个访问量可能达百万千万级别的网站来说
这无疑是服务器一个大大的负担,所以把动态数据转换成静态html页面就成了节省人力物力的首选。

现在我们来开发如何让CI框架生成静态页面.下面直接帖代码:

$template_file = “template.html”;$new_file = “new.html”;//
模版文件指针$template_juBing = fopen ( $template_file, “r” );//
要生成的文件指针$newFile_juBing = fopen ;

修改后地址:

CodeIgniter拥有功能强大的Email类。以下为利用其发送邮件的代码。

因为此前没有相应的经验
刚开始的时候觉得这个技术很神秘,但在看了一些例子以后发现并不是那么复杂,经过一个上午加中下午的试验
终于把该做的任务完成了 下面是一些心得和一个简单的例子

$this->output->get_output();

// 方式一获取整体模板内容字符串,替换后赋给新文件$templateString = fread
( $template_juBing, filesize ;$showString = replaceTemplateString ; //
替换模板中字符串fwrite ( $newFile_juBing, $showString ); //
将替换后的内容写入生成的HTML文件

复制代码 代码如下:RewriteEngine
onRewriteBase /onsiteRewriteCond %{REQUEST_URI} ^system.* RewriteRule
^$ /index.php?/$1 [L]RewriteCond %{REQUEST_URI} ^application.*
RewriteRule ^$ /index.php?/$1 [L]RewriteCond %{REQUEST_FILENAME}
!-fRewriteCond %{REQUEST_FILENAME} !-dRewriteRule ^\.html$
index.php/welcome/index/$1 [L]

关于CI的Email类的详情请参考:

希望大虾们不要笑话我哈

使用这个方法,你可以可以得到将要输出的数据,并把它保存起来,留着它用(我们做新闻类型网站的时候,常常需要生成静态的HTML文件).

/*// 方式二循环读取模版每行内容字符串,替换后依次添加到新文件while ( !
feof { // feof()
函数检测是否已到达文件末尾。如果文件指针到了末尾或者出错时则返回
TRUE。否则返回FALSE。 $templateString = fgets ; // fgets
从文件指针中读取一行并返回长度最多为 length – 1
字节长度的字符串,包括换行符。如果没有指定 length,则默认为 1K,或者说
1024 字节。 $showString = replaceTemplateString ; fwrite (
$newFile_juBing, $showString ); //
第一次往打开的指针文件中写入内容时会替换指针文件中原有内容,在该文件指针关闭前,fwrite函数再添加内容会在已添加内容之后}*///
关闭文件指针fclose ;fclose ;

规则是没有错的,但万想不到CodeIgniter竟然报404找不到页面;经过测试在根目录建立同名的html文件是能够正常显示的;

文件路径为/application/controllers/welcome.php

一般来说 用php转换输出html页面有两种办法 引用大虾的文章如下:

$string = $this->output->get_output();$this->load->helper;write_file('./lianglong_codeigniter.html', $string);

/*数据库与静态页的关系通常数据库内添加一条信息同后,生成一个该信息的静态页面,所以最好在数据库表中添加一字段存储对应静态页面的路径文件名,方便以后的修改,删除

那问题应该是CI的配置导致的;经过一番波折,发现一个参数:

load->library; //加载CI的email类 //以下设置Email参数 $config['protocol'] = 'smtp'; $config['smtp_host'] = 'smtp.163.com'; $config['smtp_user'] = 'fanteathy'; $config['smtp_pass'] = '******'; $config['smtp_port'] = '25'; $config['charset'] = 'utf-8'; $config['wordwrap'] = TRUE; $config['mailtype'] = 'html'; $this->email->initialize; //以下设置Email内容 $this->email->from('fanteathy@163.com', 'fanteathy'); $this->email->to; $this->email->subject; $this->email->message('Testing the email class.'); $this->email->attach('application\controllers\1.jpeg'); //相对于index.php的路径 $this->email->send(); //echo $this->email->print_debugger(); //返回包含邮件内容的字符串,包括EMAIL头和EMAIL正文。用于调试。 }}

目前PHP的模板可以说是很多了,有功能强大的smarty,还有简单易用的smarttemplate等。它们每一种模板,都有一个获取输出内容的函数。我们生成静态页面的方法,就是利用了这个函数。用这个方法的优点是,代码比较清晰,可读性好。

比如我们要输出的页面是要加载某个视图后的数据,那么我们就在

模版的替换一般来说,如果需要修改静态HTML页面的模版,通常的做法是将所有的已经生成的HTML页面删除,然后重新创建新的HTML页面。

复制代码
代码如下:$config[‘uri_protocol’] = ‘AUTO’;

在加载Email类之后需要配置Email参数。配置完成之后使用

这里我用smarty做例子,说明如何生成静态页:

$this->load->view;

$this->output->get_output();

静态页上的动态操作有些时候,在创建的静态HTML页上面也需要进行一些动态操作。例如,新闻系统中的每篇新闻要统计点击率。可通过一个宽和高都为0像素的图像控件来隐藏的调用一个php页面来实现页面计数器功能,如图片 1

把它改成:

$this->email->initialize
assign("title","Hello World!");$content = $t->fetch("templates/index.htm");//这里的 fetch() 就是获取输出内容的函数,现在$content变量里面,就是要显示的内容了$fp = fopen("archives/2005/05/19/0001.html", "w");fwrite;fclose;?> 

并把值给一个变量如$lianglong存储起来.再用CI的FILE中的write_file辅助函数,生成你要的文件,如下例

链接目录的静态页通常对于使用静态页面的系统来说,往往将连接列表的目录页也生成静态HTML文件供访问者浏览注意的是因为每增加或者减少一条数据库信息都会对链接列表产生影响,因此,每次对数据库信息进行添加和删除时都需要更新链接目录的静态页。分页的设计可以通过创建多个链接目录的静态页来完成。*/

复制代码
代码如下:$config[‘uri_protocol’] = ‘PATH_INFO’;

来初始化参数。再设置邮件的内容,最后调用

第二种方法:利用ob系列的函数。

function sc(){ $this->load->helper; $this->load->view; $lianglong=$this->output->get_output(); if ( !write_file('./lianglongfile.html', $lianglong)) { echo 'Unable to write the file'; } else { echo 'File written!'; }}

function sc(){ $this->load->helper; $liangdong=$this->load->view('welcome_message',$data,true); if ( !write_file('./lianglongfile.html', $lianglong)) { echo 'Unable to write the file'; } else { echo 'File written!'; }}

// 方法二根据缓冲区生成ob_start (); //
当缓冲区激活时,并且有ob_end_clean()的情况下,所有输出打印的非文件头信息均不会输出打印到页面,而是保存在内部缓冲区。如果没有ob_end_clean(),则信息既被存在内部缓冲区,也被输出打印?>this
is test Output Control

页面终于显示正常了;

$this->email->send()

这里用到的函数主要是 ob_start,
ob_get_content是打开浏览器缓冲区的意思,打开缓冲后,所有来自PHP程序的非文件头信息均不会发送,而是
保存在内部缓冲区,直到你使用了ob_end_flush().而这里最重要的一个函数,就是ob_get_contents(),这个函数的作用是获取
缓冲区的内容,相当于上面的那个fetch(),道理一样的。

更多关于CodeIgniter相关内容感兴趣的读者可查看本站专题:《codeigniter入门教程》、《CI框架进阶教程》、《php优秀开发框架总结》、《ThinkPHP入门教程》、《ThinkPHP常用方法总结》、《Zend
FrameWork框架入门教程》、《php面向对象程序设计入门教程》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》

$contents = ob_get_contents (); //
获取缓冲区到此为止存储的信息,缓冲区只保存会向页面浏览器输出打印的内容,php执行代码等不会保存//
$contents = ob_get_clean(); //
获取缓冲区到此为止存储的信息,并关闭清除缓冲区//
ob_end_flush();//输出打印缓冲区到此为止存储的信息,并关闭清除缓冲区

发送邮件。其中要注意如果添加附件时,附件的地址是相对CI根目录下的index.php的路径。运行结果如下:

我选用的第2种方法 也就是用ob系列的函数

希望本文所述对大家基于CodeIgniter框架的PHP程序设计有所帮助。

ob_end_clean (); // 关闭清除缓冲区的内容

更多关于CodeIgniter相关内容感兴趣的读者可查看本站专题:《codeigniter入门教程》、《CI框架进阶教程》、《php日期与时间用法总结》、《php面向对象程序设计入门教程》、《php字符串用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》

我刚开始看这个的时候有点不太明白 后来才知道ob是output buffering的意思
也就是输出缓存

file_put_contents ( $new_file, $contents );// 向文件写入内容

希望本文所述对大家基于CodeIgniter框架的PHP程序设计有所帮助。

当你准备输出的时候 所有的数据都保存在ob里面 服务器解析完php以后
把所有要输出到客户端的html代码都存放在ob里面 如果我们要输出html静态页面
只要把缓存取出来写入一个html页面即可

?>template.html复制代码 代码如下:

所以原理其实是很简单的

%title%

这里用到了几个函数 由于我初学php 很多函数我还不了解 所以这里也说明一下
希望可以帮助大家

%title%


%body%

ob_start():开始“捕捉”缓存 也就是从这里开始 打开浏览器的缓存

ob_end_flush():关闭浏览器缓存

ob_get_content():读取缓存内容

fopen打开文件 这个函数的打开模式有好几种 下面介绍几种主要的模式:

“r” 只读方式打开,将文件指针指向文件头。

“r+” 读写方式打开,将文件指针指向文件头。

“w”
写入方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。

“w+”
读写方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。

fwrite 写入文件

fclose() 关闭文件

由于我要转换的html文件非常多 可能有几百个
所以这里不能静态指定fopen的路径 大家可以设置一个路径变量
里面可以保存用户传来的id等信息 方便进行html文件命名
下面是我结合上次php读取xml数据的一个简单例子

";ifecho $xml_data."
";}function endElement($parser_instance, $element_name) //结束标签事件的函数{global $name,$position;$name=false;$position=false;}//xml数据读取完毕$htmlname=$id.".html";//$id可以自己定义 这里代表用户传来的id$htmlpath="archives/".$htmlname; //设置路径变量$content = ob_get_contents();//取得php页面输出的全部内容$fp = fopen;fwrite;fclose;?>

以上内容就是给大家分享的php生成静态html页面的方法,希望大家喜欢。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图