php页面静态化学习笔记
- 格式:doc
- 大小:3.95 MB
- 文档页数:37
上一讲说了 url 伪静态的问题,这只是创建了对 seo 友好的 url,而真静态会生成静态的 html 文件,很明显优势更大,静态文件能够加快访问速度,减少服务器压力等等,但是, 当你的文章数量很多事,也是很占磁盘的,实现原理其实很简单,就是利用 php 的文件操 作生成静态的 html 文件。
当然也可以利用 php 的 ob 操作完成,我这里为了达到当发布文 章戒者更新文章立即生成静态页面效果只用了一般 php 文件操作。
php 页面静态化原理:(由 php 点点通提供 php 教程) 1.创建测试数据库 test,建立 user 表如下(自己插入几条测试数据库) : CREATE TABLE IF NOT EXISTS `news` ( `id` int(10) NOT NULL AUTO_INCREMENT, `title` varchar(128) DEFAULT NULL, `content` text, `time` int(10) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=12 ;2.建立连接数据文件 conn.php <?php $dsn = "mysql:host=localhost;dbname=test;"; $user = "root"; $password = ""; try{ $dbh = new PDO($dsn,$user,$password); }catch(PDOException $e){ echo "连接失败".$e->getMessage(); } ?>3.显示新闻列表(news.php) ,注意,其连接为静态 html 连接,这时还没生成,当然链接 打丌开: <meta content="text/html;charset=utf-8" />http-equiv="content-type" <a href="add.php">添加文章</a> <hr> <?php require_once "conn.php"; $sql = "select * from news"; foreach($dbh->query($sql) as $row){ echo href='news_{$row['id']}.html'>{$row['title']}</a>----<a href='add.php?id={$row['id']}'>修改文章</a><br>"; } ?> 页面效果如下:"<a4.添加修改文章页面: <meta content="text/html;charset=utf-8" />http-equiv="content-type" <?php //获取修改的内容 if($_GET['id']){ require_once "conn.php"; $sql = "select * from news where id={$_GET['id']}"; $res = $dbh->query($sql)->fetch(); } ?> <form action="action.php" method="post"> 标 题 : <input type="text" name="title" value="<?=@$res['title']?>"/><br/> 内 容 : <textarea name="content" row=4><?=@$res['content']?></textarea><br/>col=40 <input type="hidden" name="id" value="<?=$_GET['id']?>" /> <input type="submit" name="submit" value="<?php echo $_GET['id'] ? '修改' : '添加'?>" /> </form> 5.用于生成静态文件的页面模板 template.html <html> <head> <title>{title}</title> <meta http-equiv="content-type"content="text/html; charset=UTF-8"/> </head> <body> {title}发表于{time} <hr> {content} </body> </html>6.action.php 当然是用来生成和更新静态文件的: <?php //表单处理操作 header("content-type:text/html;charset=utf-8"); require_once 'conn.php'; $title = $_POST['title']; $content = $_POST['content']; $time = time(); if($_POST['submit']=='添加'){ $sql = "insert into news values('','$title','$content',$time)"; $dbh->query($sql); $id = $dbh->lastInsertId(); $filename = "news_{$id}.html"; $fp_tmp = fopen("template.html","r"); $fp_html = fopen($filename,"w"); while(!feof($fp_tmp)){ $row = fgets($fp_tmp); $row = replace($row,$title,$content,date('Y-m-dH:i:s',$time)); fwrite($fp_html,$row); } fclose($fp_tmp); fclose($fp_html); echo "添加成功并生成静态文件"; }else{ $sql = "update news set title = $title , content = $content ,time = $time where id ={$_POST['id']}"; $dbh->query($sql); $filename = "news_{$_POST['id']}.html"; @unlink($filename); $fp_tmp = fopen("template.html","r"); $fp_html = fopen($filename,"w"); while(!feof($fp_tmp)){ $row = fgets($fp_tmp); $row = replace($row,$title,$content,date('Y-m-d H:i:s',$time)); fwrite($fp_html,$row); } fclose($fp_tmp); fclose($fp_html); echo "更新成功并更新静态文件"; } //逐行替换函数 function replace($row,$title,$content,$time){ $row=str_replace("{title}",$title,$row); $row=str_replace("{content}",$content,$row); $row=str_replace("{time}",$time,$row); return $row; } ?>一切 ok 啦,当然这是简单的实现 php 页面静态化原理!欢迎转载! 原文地址: /php/php-rewrite.html ,转载请注明地址,谢谢!。
PHP页⾯静态化——纯静态与伪静态⽤法详解⽬录为什么要静态化页⾯?伪静态纯静态静态化页⾯实现原理代码实现本⽂实例讲述了PHP页⾯静态化——纯静态与伪静态⽤法。
分享给⼤家供⼤家参考,具体如下:为什么要静态化页⾯?当⽤户访问⼀个不经常更新的Web页⾯,PHP接到指⽰对php脚本⽂件进⾏解析,从数据库查询到该页⾯所需要的数据,然后对页⾯模板进⾏渲染,最后将⼀个成品页⾯展⽰给⽤户。
单次请求对于服务器来说⾮常简单,处理起来⾮常快,但是如果同时有成千上万各⽤户请求该页⾯呢?这⽆疑是对资源的⼀种浪费,这就是我们要做静态的⽬的。
静态化分为纯静态与伪静态,纯静态⼜分为局部纯静态和全部纯静态。
伪静态纯静态局部纯静态⼀个页⾯通常由多个部分组成,例如⼀个博客,他可能由正⽂、分类、友情链接、栏⽬等部分组成。
当有些部分更新频繁,⽽有些部分不常更新时就可以采⽤局部静态化。
全部纯静态看了前⾯的内容这个就很容易理解了,当⼀个页⾯所有内容都不常更新即采⽤这种⽅式。
静态化页⾯实现原理⾸先要说的是⼀个叫做缓冲器(buffer)的东西。
举个简单的例⼦说明他的作⽤:我们在编辑⼀篇⽂档时,在我们没有保存之前,系统是不会向磁盘写⼊的,⽽是写到buffer中,当buffer写满或者执⾏了保存操作,才会将数据写⼊磁盘。
对于PHP来说,每⼀次像 echo 这样的输出操作,同样是先写⼊到了 php buffer ⾥,在脚本执⾏完毕或者执⾏了强制输出缓存操作,数据才会在浏览器上显⽰。
这⾥我们就要对这个缓冲区做⼀下⽂章了,在php输出内容之前,我们取出缓冲区的内容(这⾥就是渲染好的模板内容了),然后将其写⼊⼀个静态⽂件中并设置过期时间,当下次⽤户访问该页⾯的时候,如果该静态⽂件存在并且在有效期内,我们就直接将该静态⽂件展⽰给⽤户看,否则重写静态⽂件。
代码实现数据库连接,⽤到了单例模式。
Database.php<?phpclass Database {//⽤于保存实例化对象private static $instance;//⽤于保存数据库句柄private $db = null;//禁⽌直接实例化,负责数据库连接,将数据库连接句柄保存⾄私有变量$dbprivate function __construct($options) {$this->db = mysqli_connect($options['db_host'], $options['db_user'], $options['db_password'], $options['db_database']);}//负责实例化数据库类,返回实例化后的对象public static function getInstance($options) {if (!(self::$instance instanceof self)) {self::$instance = new self($options);}return self::$instance;}//获取数据库连接句柄public function db() {return $this->db;}//禁⽌克隆private function __clone() {// TODO: Implement __clone() method.}//禁⽌重构private function __wakeup() {// TODO: Implement __wakeup() method.}}⽤于静态化页⾯Cache.php<?phpclass Cache {public function index($options) {//判断⽂件是否存在,判断是否过期if (is_file('shtml/index.shtml') && (time() - filemtime('shtml/index.shtml') < 300)) {require_once ('index.shtml');}else {require_once ('Database.php');$con = Database::getInstance($options)->db();$sql = "SELECT * FROM pro_test";$exe_res = mysqli_query($con, $sql);$res = mysqli_fetch_all($exe_res);try{if (!$res) {throw new Exception("no result");}}catch (Exception $e) {echo 'Message: ' .$e->getMessage();}//开启缓存区,这后⾯的内容都会进缓存区ob_start();//引⼊模板⽂件(模板会渲染数据)require_once ('templates/index.php');//取出缓存区内容(在这⾥是渲染后的模板),将其保存(默认会覆盖原来的)为index.shtml(static html) file_put_contents('shtml/index.shtml', ob_get_contents());}}}//数据库配置信息$options = ['db_host' => 'mysql','db_user' => 'root','db_password' => 'localhost','db_database' => 'pro_shop',];$obj = new Cache();$obj->index($options);template/index.php<!DOCTYPE><html><head><meta charset="UTF-8"><title>⾸页</title></head><body><?php foreach ($res as $item) {?><div>姓名:<?php echo $item[1]?></div><div>密码:<?php echo $item[2]?></div><?php }?></body></html>浏览器访问 localhost/Cache.php更多关于PHP相关内容感兴趣的读者可查看本站专题:《》、《》、《》、《》、《》、《》及《》希望本⽂所述对⼤家PHP程序设计有所帮助。
如何生成静态页面的PHP类如何生成静态页面的PHP类PHP具有非常强大的功能,所有的CGI的'功能PHP都能实现,而且支持几乎所有流行的数据库以及操作系统。
最重要的是PHP可以用C、C++进行程序的扩展!以下是店铺为大家搜索整理的如何生成静态页面的PHP类,希望能给大家带来帮助!更多经常内容请及时关注我们店铺!class html{var $dir; //dir for the htmls(without/)var $rootdir; //root of html files(without/):htmlvar $name; //html文件存放路径var $dirname; //指定的文件夹名称var $url; //获取html文件信息的来源网页地址var $time; //html文件信息填加时的时间var $dirtype; //目录存放方式:year,month,,,,var $nametype; //html文件命名方式:namefunctionhtml($nametype='name',$dirtype='year',$rootdir='html') {$this->setvar($nametype,$dirtype,$rootdir);}functionsetvar($nametype='name',$dirtype='year',$rootdir='html') {$this->rootdir=$rootdir;$this->dirtype=$dirtype;$this->nametype=$nametype;}function createdir($dir=''){$this->dir=$dir?$dir:$this->dir;if (!is_dir($this->dir)){$temp = explode('/',$this->dir);$cur_dir = '';for($i=0;$i{$cur_dir .= $temp[$i].'/';if (!is_dir($cur_dir)){@mkdir($cur_dir,0777);}}}}function getdir($dirname='',$time=0){$this->time=$time?$time:$this->time;$this->dirname=$dirname?$dirname:$this->dirname; switch($this->dirtype){case 'name':if(empty($this->dirname))$this->dir=$this->rootdir;else$this->dir=$this->rootdir.'/'.$this->dirname; break;case 'year':$this->dir=$this->rootdir.'/'.date("Y",$this->time); break;case 'month':$this->dir=$this->rootdir.'/'.date("Y-m",$this->time); break;case 'day':$this->dir=$this->rootdir.'/'.date("Y-m-d",$this->time); break;}$this->createdir();return $this->dir;}function geturlname($url=''){$this->url=$url?$url:$this->url;$filename=basename($this->url);$filename=explode(".",$filename);return $filename[0];}function geturlquery($url=''){$this->url=$url?$url:$this->url;$durl=parse_url($this->url);$durl=explode("&",$durl[query]);foreach($durl as $surl){$gurl=explode("=",$surl);$eurl[]=$gurl[1];}return join("_",$eurl);}function getname($url='',$time=0,$dirname=''){$this->url=$url?$url:$this->url;$this->dirname=$dirname?$dirname:$this->dirname;$this->time=$time?$time:$this->time;$this->getdir();switch($this->nametype){case 'name':$filename=$this->geturlname().'.htm';$this->name=$this->dir.'/'.$filename;break;case 'time':$this->name=$this->dir.'/'.$this->time.'.htm';break;case 'query':$this->name=$this->dir.'/'.$this->geturlquery().'.htm';break;case 'namequery':$this->name=$this->dir.'/'.$this->geturlname().'-'.$this->geturlquery().'.htm';break;case 'nametime':$this->name=$this->dir.'/'.$this->geturlname().'-'.$this->time.'.htm';break;}return $this->name;}functioncreatehtml($url='',$time=0,$dirname='',$htmlname='') {$this->url=$url?$url:$this->url;$this->dirname=$dirname?$dirname:$this->dirname;$this->time=$time?$time:$this->time;//上面保证不重复地把变量赋予该类成员if(empty($htmlname))$this->getname();else$this->name=$dirname.'/'.$htmlname; //得到name$content=file($this->url) or die("Failed to open the url ".$this->url." !");;///////////////关键步---用file读取$this->url$content=join("",$content);$fp=@fopen($this->name,"w") or die("Failed to open the file ".$this->name." !");if(@fwrite($fp,$content))return true;elsereturn false;fclose($fp);}/////////////////以name为名字生成htmlfunction deletehtml($url='',$time=0,$dirname=''){$this->url=$url?$url:$this->url;$this->time=$time?$time:$this->time;$this->getname();if(@unlink($this->name))return true;elsereturn false;}/*** function::deletedir()* 删除目录* @param $file 目录名(不带/)* @return*/function deletedir($file){if(file_exists($file)){if(is_dir($file)){$handle =opendir($file);while(false!==($filename=readdir($handle))) {if($filename!="."&&$filename!="..")$this->deletedir($file."/".$filename);}closedir($handle);rmdir($file);return true;}else{unlink($file);}}}}。
php网页静态化及模板原理演示网页静态化及模板原理演示看了一些开源系统的,简单的总结一下php的模板及静态原理。
先贴代码,再做解释。
index.phpPhp代码1.<?php2.//如果已存在静态页面,直接读取并显示3.if(file_exists('index.html'))4.{5.echo file_get_contents('index.html');6.}7.else8.{9.//这里把需要的变量都附好值10.$var = "Hello,World.";11.//开启输出缓存12.ob_start();13.//这里调用模板,模板里嵌入一些PHP标签,用来显示变量的值14.require_once('template.php');15.//这里得到输出缓存,也就是调用模板后,将来要显示到页面上的内容16.$out = ob_get_contents();17.//把要显示的内容保存成一个文件18.file_put_contents('index.html',$out);19.//输出20.ob_end_flush();21.}template.phpPhp代码1.<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "/TR/xhtml1/DTD/xht ml1-transitional.dtd">2.<html xmlns="/1999/xhtml">3.<head>4.<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />5.<title>HTML</title>6.</head>7.<body>8.<hr/>9.<p>10.<?php echo $var;?>11.</p>12.<hr/>13.</body>14.</html>代码解释见注释。
期末web静态网页总结一、学习目标和规划在开始学习之前,我明确了我的学习目标和规划。
我的主要目标是学习如何设计和开发一个完整的静态网页,并且掌握一些网页开发的基本技巧。
为了达到这个目标,我制定了一个详细的学习计划,包括学习相关的理论知识、实践练习和项目实践等。
二、学习过程和方法在开始学习之前,我首先了解了网页设计和开发的一些基本知识。
我学习了基本的HTML和CSS语法,学习了如何编写和布局网页,学习了一些常用的网页设计原则和技巧。
然后,我开始进行实践练习,通过编写一些简单的网页来巩固所学的知识。
在完成这些练习之后,我开始了一个项目实践,根据我自己的设计想法和需求,设计和开发了一个完整的静态网页。
在整个学习过程中,我不仅通过阅读教材和参考资料,还通过观看教学视频和参加在线讨论来获得帮助和解答疑问。
三、学习成果和收获通过这次学习,我获得了一些宝贵的学习成果和收获。
首先,我掌握了基本的HTML和CSS语法,可以编写和布局一个简单的静态网页。
其次,我学会了运用一些网页设计原则和技巧,使得网页看起来更美观和易读。
此外,我还学会了一些网页优化的技巧和工具,如使用图片压缩工具来减少图片的大小,使用缓存技术来提高网页的加载速度等。
最重要的是,我培养了自己的设计和开发能力,并且提高了解决问题和解决难题的能力。
四、不足和改进在这次学习过程中,我也遇到了一些困难和挑战。
首先,由于是初学者,我对于一些概念和技术之间的联系和应用不是很清楚,导致在实践中遇到了一些问题。
其次,在进行项目实践的时候,我可能遇到了一些不熟悉的设计和开发需求,导致在实现中遇到一些困难和障碍。
为了克服这些问题和困难,我需要更加注重对理论知识的学习和理解,同时也要不断进行实践和练习,提升自己的设计和开发能力。
总之,在这次web静态网页的学习中,我通过学习相关的理论知识和进行实践练习,掌握了一些基本的网页设计和开发技巧。
通过参与项目实践,我培养了自己的设计和开发能力,并且提高了解决问题和解决难题的能力。
静态网页期末总结一、引言随着互联网的发展,网页技术也变得越来越重要。
与传统的单纯展示信息的网页不同,如今的网页不仅是信息的搬运工,更是一种用户体验的艺术。
对于网页设计师来说,静态网页是入门级别的作品,但它同样需要设计师们运用各种技术手段,提高用户的体验感和设计的质量。
本篇总结将回顾我在学习静态网页期间所学到的知识、技巧和经验,并分享一些心得体会。
二、学习过程1. 学习动机:在学习静态网页之前,我已经有一定的编程基础,包括HTML、CSS和JavaScript。
然而,我意识到静态网页设计与前端开发有所不同,更注重页面的美观性和用户体验。
因此,我希望通过学习静态网页设计,提升自己的设计水平和实践经验。
2. 学习内容:我在学习期间主要学习了以下内容:- 设计理论:学习了网页设计的基本原则,如对称、平衡、色彩搭配等,为后续的设计提供了理论的支持。
- 工具使用:学习了一些常用的设计工具,如Photoshop、Illustrator等,熟练使用这些工具后,可以更好地制作素材和进行设计。
- HTML和CSS:巩固了HTML和CSS的基础知识,并学习了一些高级技巧,如响应式布局、动画效果等。
- 用户体验设计:学习了用户研究和用户测试等基本概念,以及如何设计一个具有良好用户体验的网页。
3. 练习与项目:通过反复练习和完成一些小型项目,我逐渐掌握了静态网页设计的技巧,并提高了设计的水平和效率。
在项目中,我尽量模仿一些优秀的网页设计,以学习他们的设计思路和技巧。
三、心得体会1. 设计理论与实践的结合:在学习设计理论的同时,我也进行了大量的实践练习。
通过练习和项目,我逐渐理解了设计理论与实践之间的联系。
设计不仅仅是一个主观的审美判断,更是需要运用一定的设计原则和技巧来达到预期的效果。
2. 创造力与技术的平衡:在进行网页设计时,我们既要发挥创造力,创造出有个性的设计,又要掌握技术,合理运用各种技巧来实现设计。
这就需要我们不断地进行学习和实践,提高自己的技术水平。
如何为大型网站提速:1.静态化2.缓存技术memcache3.Mysql优化瓶颈:带宽,数据库访问提出问题->引出新技术->小案例->细节->使用到项目中三个重要概念:1.静态网站http://localhost/test.html2.动态网址http://localhost/showNews.php?id=2&title=test搜索引擎不喜欢3.伪静态网址传统做法:http://localhost/showNews.php?lang=cn&class=2&id=100这种网址不好,SEO不好, SQL注入攻击危险改成伪静态网址:不要过于精简http://localhost/news-cn-class2-id100.html补充说明:SEO 搜索引擎优化页面静态化概念:在实际开发中通常使用缓存技术或页面静态化来解决页面静态化分为:1.真静态:把php -> html访问时不操作数据库2.伪静态:只是把网址静态(访问数据库)页面静态化的必要性:1.访问PHP的速度一般比html慢ab.exe可以用来测试网站访问速度( 压力测试),该工具可以模拟多人并发访问某个页面ab.exe -n 10000 -c 10 http://localhost/test.php-n:请求多少次-c:表示多少人并发访问2.利于搜索引擎优化URL长度,静态页参数,meta信息,图片alt信息,frame信息(尽量不要使用框架) 3.防止SQL注入缓存机制不用总访问数据库使用php缓存机制完成页面静态化如果要测试php自己的缓存机制,需要做配置php.ini中:display_errors=Onoutput_buffering=Offerror_reporting=设置错误级别<?php//开启缓存[可以通过php.ini, 也可以通过ob_start()]ob_start();echo "yyy";header("content-type:text/html;charset=utf-8");echo "hello";//ob_clean() 可以清空output_buffering内容ob_clean();//ob_end_clean()关闭output_buffering缓存,同时清空其中内容ob_end_clean();//ob_flush()函数是把output_buffering内容输出,清空ob_flush();//ob_end_flush()函数是把output_buffering内容输出,清空并关闭ob_end_flush();echo "kkk"; // => 程序缓存(内容必须放在header()后面)//ob_get_contents()可以获取output_buffering内容//$contents=ob_get_contents();//file_put_contents("d:/log.txt", $contents);?>flush()函数是刷新程序缓存的内容补充:php header()函数定义和用法header() 函数向客户端发送原始的HTTP报头。
静态网页制作期末总结一、引言静态网页制作是计算机专业学生必修的一门课程,通过学习这门课程,我们可以了解和掌握网页制作的基本流程和技术。
本文将对我在静态网页制作课程中的学习和实操经验进行总结和回顾。
二、学习内容静态网页制作课程主要包括以下几个方面的内容:1. HTML基础知识:了解HTML的基本标签和语法规则,掌握HTML页面的结构和常用的标签,学会使用链接、图像、表格、表单等元素。
2. CSS样式设置:学习CSS的基本概念和语法规则,了解样式设置的方式,掌握盒子模型、浮动和定位等布局技术,实现网页的样式设计和布局。
3. JavaScript脚本编程:学习JavaScript的基本语法和特性,掌握变量、函数、条件语句、循环语句等基本知识,了解DOM操作和事件处理等高级技术,实现网页的交互效果。
4. 响应式设计:学习如何使用媒体查询和流式布局技术,实现网页在不同设备和屏幕尺寸上的适配和优化,提升用户体验。
三、学习经验在静态网页制作课程的学习过程中,我积累了一些宝贵的经验,如下所述:1. 系统学习基础知识:HTML、CSS和JavaScript是网页制作的三大基础技术,要系统学习它们的基本知识和技巧,掌握它们的用法和特性。
要多看教材和参考资料,多练习和做实验,不断巩固和加深对基础知识的理解和掌握。
2. 多做实际项目:通过多做实际项目,我们可以将理论知识应用到实践中,提升自己的实际操作能力和技巧。
可以根据教材或者自己的兴趣选择一些实际项目,如个人博客、网上商城等,从简单到复杂进行逐步实践。
3. 与他人交流和合作:在课程学习中,与他人进行交流和合作可以获得更多的思路和灵感,提高自己的问题解决能力和团队合作能力。
可以与同学一起讨论和解决问题,相互学习和分享经验。
4. 不断学习和更新知识:网页制作是一个不断更新和发展的领域,我们应该保持学习的状态,关注最新的技术和趋势,不断提升自己的能力。
可以关注网站、博客、论坛等相关资源,学习他人的经验和技巧,不断更新自己的知识和技术。
php⽣成静态html页⾯的⽅法(2种⽅法)因为每次⽤户点击动态链接的时候都会对服务器发送数据查询的要求,对于⼀个访问量可能达百万千万级别的⽹站来说这⽆疑是服务器⼀个⼤⼤的负担,所以把动态数据转换成静态html页⾯就成了节省⼈⼒物⼒的⾸选。
因为此前没有相应的经验刚开始的时候觉得这个技术很神秘,但在看了⼀些例⼦以后发现并不是那么复杂(不过⽹上的资料并不是特别详细),经过⼀个上午加中下午的试验终于把该做的任务完成了下⾯是⼀些⼼得和⼀个简单的例⼦希望⼤虾们不要笑话我哈⼀般来说⽤php转换输出html页⾯有两种办法引⽤⼤虾的⽂章如下:第⼀种:利⽤模板。
⽬前PHP的模板可以说是很多了,有功能强⼤的smarty,还有简单易⽤的smarttemplate等。
它们每⼀种模板,都有⼀个获取输出内容的函数。
我们⽣成静态页⾯的⽅法,就是利⽤了这个函数。
⽤这个⽅法的优点是,代码⽐较清晰,可读性好。
这⾥我⽤smarty做例⼦,说明如何⽣成静态页:<?phprequire("smarty/Smarty.class.php");$t = new Smarty;$t->assign("title","Hello World!");$content = $t->fetch("templates/index.htm");//这⾥的 fetch() 就是获取输出内容的函数,现在$content变量⾥⾯,就是要显⽰的内容了$fp = fopen("archives/2005/05/19/0001.html", "w");fwrite($fp, $content);fclose($fp);>第⼆种⽅法:利⽤ob系列的函数。
这⾥⽤到的函数主要是 ob_start(), ob_end_flush(), ob_get_content(),其中ob_start()是打开浏览器缓冲区的意思,打开缓冲后,所有来⾃PHP程序的⾮⽂件头信息均不会发送,⽽是保存在内部缓冲区,直到你使⽤了ob_end_flush().⽽这⾥最重要的⼀个函数,就是ob_get_contents(),这个函数的作⽤是获取缓冲区的内容,相当于上⾯的那个fetch(),道理⼀样的。
题外话:大流量技术:1.服务器集群2.mysql优化(设计合理的数据库表3nf,分表垂直分割水平分割,读写分离技术多个mysql同时工作,mysql配置优化,硬件升级)3.缓存技术memched/redis。
.大型网站提速提速:Mysql优化,页面静态化,memcached大型网站的定义:1.pv值(page views):页面的访问量。
当页面访问量很大的时候,带来了很多问题:①流量变大,解决方案买带宽,优化程序,图片的大小不能多于多少K②并发量变大,同时访问网站的人多了,解决方案,要对程序的结构进行修整->服务器集群传统架构:优化结构:整个的重点还是php程序,考验程序员的东西。
2.数据量很大:解决方法:①表的设计合理②分表技术(垂直分割和水平分割)、建立适当的索引、读写分离、Mysql配置优化(调整最大并发量,定时对数据库碎片整理、碎片,实现方法:windows下用任务管理器,niux下用crontab),硬件升级③页面静态化④缓存技术(memcached)页面静态化技术原理图:几个概念:静态网址:如果我们访问的是静态页面,则把这个url称作静态网站,html网址特点:1.利于seo(search engine optimization)搜索引擎优化2.访问速度快3.防止sql注入漏洞动态网址:在访问的时候可以传入参数,称为动态网址,php网址特点:1.不利于seo2.访问速度慢3.sql注入的可能伪静态网址:希望达到这样的目的,这样的话,我们把图片下端的称为伪静态网址。
这样做的特点:1.利于seo2.防止了注入但是它仍然要访问数据库,也就是说速度没有优化。
页面静态化的分类:从方式来看:1.真静态,2.伪静态从范围来看:1.全局静态,2.局部静态。
测试压力的工具ab.exe需要进入控制台ab.exe –n 访问的总次数–c 多少人访问url(并发量)举例说明ab.exe –n 10000 –c 100 http://localhost/phpstatic/test.php当我们调整访问人数为1000的时候:很悲剧的事情发生了,说明我们的apache服务器支撑不住了。
解决方案,我们需要调整apache的最大并发量。
MPM(多路处理模块,就是指明apache怎样处理并发):apache处理并发的方式。
有三种方式1.perfork 预处理进程方式:预先准备一些进程,等待请求的到来,这样的方式消耗很大。
2.worker 工作模式:预先开启进程,当有请求的时候,进程会开启线程,线程为请求服务。
一个进程可以开启多个线程3.winnt模式windows下采用的:就是worker模式简单的说是这样的:如何设置apache最大并发数:1.位置httpd.conf文件中,大约470多行。
# Server-pool management (MPM specific)Include conf/extra/httpd-mpm.conf2.确定apache的工作模式:cmd下进入apache的bin目录,输入httpd.exe –l(小写的L);我们主要看mpm_yyyyy ,如果这个yyyy是什么,就说明是什么工作模式了。
3.去修改httpd-mpm.conf调整150为1000刚才的测试可以运行了4.重启apache在linux下如何配置呢,建议配置:如果网站的pv值上到了百万:可以调节如下每个都增加1000即可。
对比图:搜索引擎的偏好:如果一张图片希望被百度搜到,<img alt=”小狗” src=””...... />在网站的前台,我们建议不要使用frame这个框架给一个图片或者视图取名字,标题越短越精准会越好。
页面静态化技术实现方式:1.使用php自带的ob缓存2.模板替换技术(正则表达式)使用PHP自带的缓存机制实现页面静态化:ob缓存机制:<?phpecho "hello100";header("content-type:text/html;charset=rtf-8");echo "hello200";?>在php5.2这个版本,在php.ini有一个配置,output_bufferring,如下:如果关闭,就会出现如下警告ob缓存的原理:打开ob缓存就可以解决①配置php.ini,output_buffering=4096(字节)②在程序中开启ob_start();开启ob缓存注意:如果ob缓存打开,那么echo就放在ob缓存里面,如果是header就放到程序缓存里面去。
当页面读取完成,那么ob缓存的内容就会被刷新到程序缓存,一并发送给浏览器。
ob的几个重要函数:ob_clean():清理ob缓存ob_get_contents():读取ob缓存的数据ob_end_clean():该函数是清空ob中的数据,并关闭ob 缓存ob_end_flush();//把ob缓存的数据刷新到程序缓存,同时关闭ob缓存ob_flush();//把ob缓存的数据刷新到程序缓存flush();//把程序缓存的数据,强制刷新到浏览器如下面演示:但是运行结果没有我们想象的那样1秒显示一个数字,我们查看flush()函数发现了问题:如果一定要有效果我们可以:使用ob缓存机制完成一个简单的新闻管理系统:我们实现全站静态化。
先按传统方式写完了代码,发现本机访问速度都相当的慢。
我们开始做优化:当第一人访问我们的页面时,我们就查询一次数据库,并生成一个静态页面。
其他人来查询的时候,我们直接就将生成的静态页面的直接返回。
1.生成静态页面2.加上逻辑,即可实现一定的优化:第一个页面:<?php//列出新闻//header("content-type:text/html;charset=utf-8");$conn=mysql_connect("localhost","root","root");if(!$conn){die ("连接失败".mysql_error());}mysql_select_db("newssystem",$conn);mysql_query("set names utf8");$sql="select * from news";$res=mysql_query($sql);echo "<h1>新闻列表</h1>";echo "<a href='addNews.html'>添加新闻</a><hr/>";echo "<table>";echo "<tr><td>id</td><td>标题</td><td><a href='#'>查看详情</a></td><td>修改新闻</td></tr>";while($row=mysql_fetch_array($res)){echo'<tr><td>'.$row[0].'</td><td>'.$row[1].'</td><td><ahref="showNews.php?id='.$row[0].'">产看详情</a></td><td><a href="">修改新闻</a></td></tr>';}mysql_free_result($res);mysql_close($conn);?>第二个页面:<?php//传统做法接受id,查询数据库$id=intval($_GET['id']);//先判断该新闻对应的新闻的静态页面是否存在$html_file="news-id".$id.".html";if(file_exists($html_file)){echo "静态页面";echo file_get_contents($html_file);exit;//这个exit特别重要,如果没有,静态化得效果就没了}$conn=mysql_connect("localhost","root","root");if(!$conn){die ("连接失败".mysql_error());}mysql_select_db("newssystem",$conn);mysql_query("set names utf8");$sql="select * from news where id=$id";$res=mysql_query($sql,$conn);if($row=mysql_fetch_assoc($res)){ob_start();//启动ob缓存header("content-type:text/html;charset=utf-8");echo "<head><meta http-equiv='content-type' content='text/html;charset=utf-8'/></head>";//解决乱码echo "<table border='1px' bordercolor='green' cellspacing='0' width='400px' height='200px'>";echo "<tr><td>新闻详细内容</td></tr>";echo "<tr><td>{$row['title']}</td></tr>";echo "<tr><td>{$row['content']}</td></tr>";echo "</table>";$ob_str=ob_get_contents();//把$ob_str保存到一个静态页面//取文件名是有很多规则的file_put_contents("news-id".$id.".html",$ob_str);}?>以上代码的缺点:静态页面的内容一旦生成,那么它永远也不会变了。