防盜鏈
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中需帶有這個參數,指定控制器所在子目錄名稱
如果你將 enable_query_strings更改爲 TRUE ,那麼普通模式就被激活了。此時,你就可以通過關鍵字來調用需要的控制器和方法了:控制器和方法名可以自己定義