参考文档
防盗链
http://blog.csdn.net/pestd/article/details/6554410
ob缓冲机制深入理解
http://www.jb51.net/article/70477.htm
伪静态
http://www.phpstudy.net/a.php/165.html
真静态实现的4中方法
http://www.jb51.net/article/74342.htm
nginx配置pathinfo的方法
http://blog.csdn.net/pangchengyong0724/article/details/51433440
大文件删除
http://www.jb51.net/LINUXjishu/405027.html
http://www.jb51.net/LINUXjishu/405042.html
http://www.jb51.net/article/46496.htm
针对这个问题我们从三方面来分析
1.它是什么
2.它能干什么
3. 它怎么用
伪静态
1. 伪静态是什么?
a.伪静态是相对于真静态而言的,就是把一些asp,php等结尾url通过apche或nginx的重写规则,变成以html一类的静态页面形式。
b.伪静态不是真正的静态,它和动态地址一样要读取数据库。
伪静态
1. 伪静态能干什么?
a.伪静态最主要的作用就是利于seo,百度蜘蛛喜欢抓取静态页面。?容易使百度spider陷入死循环
b.但是并发量高的时候会加大服务器的压力,所以用的时候要注意。
伪静态
3.伪静态怎么用?
伪静态就是利用apche,nginx重写规则,对url地址重写实现的
实现原理
a.打开apache的重写模( mod_rewrite.so)
b.Nginx默认支持伪静态
配置方式有两种
a.在配置虚拟主机的时候设置
b.在项目的根目录下建一个.htaccess文件在里面配置
真静态
1.真静态是什么?
在 网站设计 中,纯粹 HTML ( 标准通用标记语言 下的一个应用)格式的网页通常被称为 “ 静态 网页 ” ,静态网页是标准的 HTML 文件,它的文件扩展名是 . htm 、 . html ,可以包含 文本 、图像、声音、 FLASH 动画、客户端脚本和 ActiveX 控件及 JAVA 小程序等。静态网页是网站建设的基础,早期的网站一般都是由静态网页制作的。静态网页是相对于 动态网页 而言,是指没有 后台数据库 、不含程序和不可交互的网页。静态网页相对更新起来比较麻烦,适用于一般更新较少的展示型网站。容易误解的是静态页面都是 htm 这类页面,实际上静态也不是完全静态,他也可以出现各种动态的效果,如 GIF 格式的动画、 FLASH 、滚动字幕等
真静态
2.真静态能干什么?
大型的项目优化中经常会考虑到,在访问量大的时候,可以减少cpu的压力,但是会生成大量的文件占用网站的磁盘空间,可以写个php的脚本或用linux的计划任务进行删除。在用真静态的时候有的时候需要用到局部的动态化。
真静态
3.真静态怎么用?
原理
a.ob缓冲(output_buffering)
Echo print_f()与之的区别
echo、print_r=>phpoutput_buffering=>webServer buffer=>browser buffer=>browser display
缓冲和缓存的理解。
1.缓存解决cup消耗的问题,2.缓冲解决高速cpu和低速i/O不匹配的问题
b.模板替换(smarty原理实现网页静态化)
1、通过URL传递一个参数(ID);
2、然后根据此ID查询数据库;
3、取得数据后根据需要修改显示内容;($str=str_replace('{$title}',$title,$str);)
4、显示模板
页面静态化在1之前使用 ob_start() 打开缓冲区,在4之后使用 ob_get_contents() 获取内存未输出内容,最后file_put_contents();写入指定文件
c.局部动态化
Ajax技术,页面加载请求php页面
d.定时任务
真静态
3.真静态怎么用?
实现方法:
1.利用PHP模板生成静态页面
2.使用PHP文件读写功能生成静态页面
3.使用PHP输出控制函数(Output Control)/ob缓存机制生成静态页面
4.使用nosql从内存中读取内容(其实这个已经不算静态化了而是缓存);
memcached是键值一一对应,key默认最大不能超过128个字节,value默认大小是1M,因此1M大小满足大多数网页大小的存储。
真静态和伪静态的区别?
1. 是不是一个真正静态页面
2. 有没有和数据库或后台程序进行交互
3. 它们的应用场景和解决的问题不同
4. 用javascript:alert(document.lastModified)来判断是真静态还是伪静态
真静态在apache和nginx上的区别与否
1.真静态在nginx上的运行速度比apache运行速度快
2.nginx处理静态文件对于apache来说消耗的内存少
伪静态在apache和nginx上的区别与否
1.本质上没有区别都是根据正则匹配对应的url的重写,apache和nginx上的伪静态规则有点不同。写的时候要注意
2.apache处理伪静态比nginx更有优势
演示
真静态,伪静态apache的实现演示
1. 真静态的实现方案ob缓存
// 新闻详情页
public function sta(){
// $uri=$this->uri->segment_array();
$id=$this->input->get('id','');
// echo $id;die;
$ob="./app/cache/ob".$id.".html";
$oldtime=file_exists($ob)?filemtime($ob):0;
if (file_exists($ob)&&(time()-$oldtime<60)) {
echo "缓存";
$ob=file_get_contents($ob);
echo $ob;
}else{
echo "数据库";
// $pdo=new PDO('mysql:host=localhost;dbname=demo01;port=3306','root','root');
// $pdo->exec("set names utf8");
// $sql="select* from test4 where id=$id";
// $res=$pdo->query("$sql")->fetch(PDO::FETCH_ASSOC);
$res=$this->db->get_where('test4',[id=>$id])->result_array();
// var_dump($res);die;
$data['res']=$res;
ob_start();
$this->load->view('sta.html',$data);
$str=ob_get_contents();
// echo $str;die;
file_put_contents($ob, $str);
}
2. 真静态的实现方案memcache
function pic(){
$pic_statis_content = "content";
$expr = 3600*24*10;//有效期,十天
$mem = new Memcache;
$mem->connect('127.0.0.1', 11211);
$mem_pic_content = $mem->get($pic_statis_content);
if($mem_pic_content){
echo $mem_pic_content;
// $mem->delete("$pic_statis_content");
}else{
echo '非缓存';
ob_start();
$name='世界上最好的编程语言';
$this->load->view('pic',['name'=>$name]);
$content = ob_get_contents();//把详情页内容赋值给$content变量
$mem->add($pic_statis_content,$content,false, $expr);
ob_end_flush();//输出商品详情页信息
}
}
Apache伪静态实现地址重写及防盗链技术
#开启重写引擎
#RewriteEngine on
RewriteRule 1.html /1.php [L]
#写重写规则
#RewriteRule cat_(\d+)t.html /index.php/user/index/$1 [L,NC]
RewriteRule c(\d+)_(.*).html /index.php?c=user&m=index&id=$1&title=$2[L,NC]
#RewriteRule cat_index.html /index.php/user/index [L,NC]
RewriteCond %{HTTP_REFERER} !^$ [NC]
RewriteCond %{HTTP_REFERER} !sta.com [NC]
RewriteRule .(jpg|gif|png|bmp|swf|jpeg) http://sta.com/app/public/dt/dt.jpg [L,NC,R=301]
真静态,伪静态nginx的实现演示
1.nginx伪静态实现地址重写和防盗链
//防盗链
location ~* \.(gif|jpg|png)$ {
valid_referers none blocked http://sta1.com:81; //允许访问的来源
if ($invalid_referer) {
rewrite ^/ http://sta1.com:81/c2_.html;
#return 403;
}
}
//伪静态地址重写
location / {
rewrite c(\d+)_(.*).html /index.php?c=user&m=index&id=$1&title=$2last;
root /usr/share/nginx/html/sta;
index index.html index.htm index.php ;
}
Nginx引入.Htaccess
include /usr/www/.htaccess
让nginx支持pathinfo模式的方式
location ~ \.php(.*)$ { # 正则匹配.php后的pathinfo部分
root html/;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /usr/share/nginx/html/stest1/$fastcgi_script_name;
fastcgi_param PATH_INFO $1; # 把pathinfo部分赋给PATH_INFO变量
include fastcgi_params;
}
rsync删除
1、建立一个空目录
mkdir -p lpf/tmp/
2、确立需要清空的目标目录
/lpf/tmp1/
3、使用rsync同步删除(注意目录后面的“/”),整体效率会快一个数量级的样子。
rsync --delete-before -a -H /root/lpf/tmp/ /root/lpf/tmp1/
选项说明:
–delete-before 接收者在传输之前进行删除操作
–progress 在传输时显示传输过程
-a 归档模式,表示以递归方式传输文件,并保持所有文件属性
-H 保持硬连接的文件
-v 详细输出模式
-stats 给出某些文件的传输状态
一般我们不需要显示进度,使用以下命令即可
rsync --delete-before -a -H /root/lpf/tmp/ /root/lpf/tmp1/
把某个文件删掉
1 建立空文件/tmp1/em.txt
2 rsync --delete-before -a -H -v --progress --stats /root/lpf/tmp//root/lpf/tmp1/
3 这样置为空后就可以快速删掉
原理:把文件系统的目录与书籍的目录做类比,rm删除内容时,将目录的每一个条目逐个删除(unlink),需要循环重复操作很多次;rsync删除内容时,建立好新的空目录,替换掉老目录,基本没开销。
测试大文件删除
1.生成文件
for i in $(seq 1 500000); do echo test>>$i.txt; done
10万文件rm删除第一次11s左右,第二次9s左右; time rm -f *.txt rsync测试两次9s左右
50万文件rm删除报错; rsync测试两次一个5分左右,一个4分左右
Ci框架普通模式和pathinfo模式的切换
可以在 application/config/config.php 文件中进行设置。如果你打开 config 文件可以看到如下内容:
$config['enable_query_strings']= FALSE;
$config['controller_trigger']= 'c'; //控制器名
$config['function_trigger']= 'm'; //方法名
$config['directory_trigger']='d';//若控制器在子目录下,url中需带有这个参数,指定控制器所在子目录名称