<?php /** * php頁面靜態化 * 靜態化分為 真靜態和偽靜態 * 靜態化的有點在於 SEO 和 安全性 使用緩存機制還可以大大提高網站的速度 */ /** * php自帶的緩存機制 * 需要在php.ini中進行配置 * 或者使用ob_start()-> output_buffering:on * 關於幾個緩存的函數:ob_start();ob_clean();ob_get_content();ob_end_clean();關閉緩存同時清空 * ob_flush();輸出緩存里面的內容並且清空,但是不關閉 ob_end_flush();關閉同時輸出 */ /**/ ob_start();//開啟緩存 echo 'yyy';//沒有開啟緩存的情況下會報錯,因為沒有遇到header的時候,php默認發送一個header,這個header無法修改 header('content-type:text/htm;charset=utf-8'); echo '123'; ob_get_contents();//得到緩存的內容 ob_end_clean(); echo 'aa';//放在程序緩存里面 header('content-type:text/htm;charset=utf-8');//運行的時候會報錯,因為緩存已經關閉 /* * 利用php自帶的緩存機制做真緩存 * 真緩存的頁面的內容應該是長期都不需要變的,並且不同用戶看到的東西都是一樣的 * 原理:用戶第一次訪問的時候查詢數據庫,然后得到緩存區的內容,並且放到緩存文件里面 * */ /** */ ob_start(); //判斷緩存文件是否存在 $html_filename='static.html'; if(file_exists($html_filename) && (filemtime($html_filename)+30) > time())//超過30秒則重新生成 { //直接取出緩存頁面的內容 echo file_get_contents($html_filename); exit; } echo 'Your content'; $html_content=ob_get_contents(); $html_filename='static.html'; file_put_contents($html_filename,$html_content); /* * * 上述原理的缺陷:1.實時性不夠 2.不利於seo優化 * 解決辦法:在數據庫發生增加和更新的時候更新緩存文件 * */ if($_REQUEST['act'] == 'add')//update 也是 { //先獲取模版文件 $template_content=file_get_contents('template.tpl'); //替換標簽 $php_content=str_replace("{",'<?php echo ',$template_content); $php_content=str_replace("}",'?>',$template_content); //生成緩存文件 $php_tplname='php_tpl.php'; file_put_contents($php_tplname,$php_content); include(file_put_contents); $html_content=ob_get_contents(); $html_filename='static.html'; file_put_contents($html_filename,$html_content); } /** * 真靜態的缺陷:生成的 緩存文件很多,占硬盤 * 對於海量的html生成,可以考慮用偽靜態 */ $str='123,33,333'; preg_match('/\d\d\d\d/is',$str,$arr);//匹配連續四個出現的數字 返回到arr 只是匹配一個 arr[0] preg_match('/(\d)(\d)/is',$str,$arr);//這時候arr返回三個 0放置匹配的字符串,arr[n]按照表達式順序返回匹配的字符串 //對於需要全部匹配的使用preg_match_all()函數;正則表達式里面需要'' 不要使用"" /** * 使用apache的rewrite機制 * 注意點:apache的配置 開啟rewrite module 也要設置derectory的權限 allowoverride from all * 文件 .htacss //匹配規則是從上而下的,可以設置error頁面 * RewireEngine On * news-id(\d)\.html$ news.php?id=$1 * news-id(\d).html$ error.php #錯誤頁面放到最后 */