PHP生成靜態(tài)網(wǎng)頁的方法
Jun 08, 2016 pm 05:33 PMPHP生成靜態(tài)網(wǎng)頁的方法
看到很多朋友在各個(gè)地方發(fā)帖問PHP生成靜態(tài)文章系統(tǒng)的方法,以前曾做過這樣一個(gè)系統(tǒng),遂談些看法,以供各位參考。好了,我們先回顧一些基本的概念。
一,PHP腳本與動(dòng)態(tài)頁面。
PHP腳本是一種服務(wù)器端腳本程序,可通過嵌入等方法與HTML文件混合,也可以類,函數(shù)封裝等形式,以模板的方式對(duì)用戶請(qǐng)求進(jìn)行處理。無論以何種方式,它的基本原理是這樣的。由客戶端提出請(qǐng)求,請(qǐng)求某一頁面 -----> WEB服務(wù)器引入指定相應(yīng)腳本進(jìn)行處理 -----> 腳本被載入服務(wù)器 -----> 由服務(wù)器指定的PHP解析器對(duì)腳本進(jìn)行解析形成HTML語言形式 ----> 將解析后的HTML語句以包的方式傳回給瀏覽器。由此不難看出,在頁面發(fā)送到瀏覽器后,PHP就不存在了,已被轉(zhuǎn)化解析為HTML語句??蛻粽?qǐng)求為一動(dòng)態(tài)文件,事實(shí)上并沒有真正的文件存在在那里,是PHP解析而成相對(duì)應(yīng)的頁面,然后發(fā)送回瀏覽器。這種頁面處理方式被稱為“動(dòng)態(tài)頁面”。
二,靜態(tài)頁面。
靜態(tài)頁面是指在服務(wù)器端確實(shí)存在的僅含HTML以及JS,CSS等客戶端運(yùn)行腳本的頁面。它的處理方式是。由客戶端提出請(qǐng)求,請(qǐng)求某一頁面 ----> WEB服務(wù)器確認(rèn)并載入某一頁面 ----> WEB服務(wù)器將該頁面以包的形式傳遞回瀏覽器。由這一過程,我們對(duì)比一下動(dòng)態(tài)頁面,即可方現(xiàn)。動(dòng)態(tài)頁面需由WEB服務(wù)器的PHP解析器進(jìn)行解析,而且通常還需連接數(shù)據(jù)庫,進(jìn)行數(shù)據(jù)庫存取操作,然后才能形成HTML語言信息包;而靜態(tài)頁面,無須解析,無須連接數(shù)據(jù)庫,直接發(fā)送,可大大減輕服務(wù)器壓力,提高服務(wù)器負(fù)載能力,大幅提供頁面打開速度和網(wǎng)站整體打開速度。但其缺點(diǎn)是,不能動(dòng)態(tài)地對(duì)請(qǐng)求進(jìn)行處理,服務(wù)器上必須確實(shí)存在該文件。
三,模板及模板解析。
模板即尚未填充內(nèi)容html文件。例如:
temp.html
this?is?a?{?file?}?file's?templets
PHP處理:
templetest.php
$title?=?"http://siyizhu.com測(cè)試模板";
$file?=?"TwoMax?Inter?test?templet,
author:Matrix@Two_Max";
$fp?=?fopen?("temp.html","r");
$content?=?fread?($fp,filesize?("temp.html"));
$content?=?str_replace?("{?file?}",$file,$content);
$content?=?str_replace?("{?title?}",$title,$content);
echo?$content;
?>?
模板解析處理,即將經(jīng)PHP腳本解析處理后得出的結(jié)果填充(content)進(jìn)模板的處理過程。通常借助于模板類。目前較流行的模板解析類有phplib,smarty,fastsmarty等等。模板解析處理的原理通常為替換。也有些程序員習(xí)慣將判斷,循環(huán)等處理放進(jìn)模板文件中,用解析類處理,典型應(yīng)用為block概念,簡單來說即為一個(gè)循環(huán)處理。由PHP腳本指定循環(huán)次數(shù),如何循環(huán)代入等,再由模板解析類具體實(shí)施這些操作。
好了,對(duì)比過靜態(tài)頁面與動(dòng)態(tài)頁面各自的優(yōu)劣,現(xiàn)在我們就來說說,如何用PHP生成靜態(tài)文件。
PHP生成靜態(tài)頁面并不是指PHP的動(dòng)態(tài)解析,輸出HTML頁面,而是指用PHP創(chuàng)建HTML頁面。同時(shí)因?yàn)镠TML的不可寫性,我們創(chuàng)建的HTML若有修改,則需刪掉重新生成即可。(當(dāng)然你也可以選擇用正則進(jìn)行修改,但個(gè)人認(rèn)為那樣做倒不如刪掉重新生成來得快捷,有些得不償失。)
言歸正傳。用過PHP文件操作函數(shù)的PHP?FANS知道,PHP中有一個(gè)文件操作函數(shù)fopen,即打開文件。若文件不存在,則嘗試創(chuàng)建。這即是PHP可以用來創(chuàng)建HTML文件的理論基礎(chǔ)。只要用來存放HTML文件的文件夾有寫權(quán)限(即權(quán)限定義0777),即可創(chuàng)建文件。(針對(duì)UNIX系統(tǒng)而言,Win系統(tǒng)無須考慮。)仍以上例為例,若我們修改最后一句,并指定在test目錄下生成一個(gè)名為test.html的靜態(tài)文件:
$title?=?"http://siyizhu.com測(cè)試模板";
$file?=?"TwoMax?Inter?test?templet,
author:Matrix@Two_Max";
$fp?=?fopen?("temp.html","r");
$content?=?fread?($fp,filesize?("temp.html"));
$content?=?str_replace?("{file}",$file,$content);
$content?=?str_replace?("{title}",$title,$content);
//?echo?$content;?
$filename?=?"test/test.html";
$handle?=?fopen?($filename,"w");?//打開文件指針,創(chuàng)建文件
/*
檢查文件是否被創(chuàng)建且可寫
*/
if?(!is_writable?($filename)){
die?("文件:".$filename."不可寫,請(qǐng)檢查其屬性后重試!");
}
if?(!fwrite?($handle,$content)){?//將信息寫入文件
die?("生成文件".$filename."失敗!");
}?
fclose?($handle);?//關(guān)閉指針
die?("創(chuàng)建文件".$filename."成功!");
?>
實(shí)際應(yīng)用中常見問題解決方案參考:
一,文章列表問題:
在數(shù)據(jù)庫中創(chuàng)建字段,記錄文件名,每生成一個(gè)文件,將自動(dòng)生成的文件名存入數(shù)據(jù)庫,對(duì)于推薦文章,只需指向存放靜態(tài)文件的指定文件夾中的該頁面即可。利用PHP操作處理文章列表,存為字符串,生成頁面時(shí)替換此字符串即可。如,在頁面中放置文章列表的表格加入標(biāo)記{articletable},而在PHP處理文件中:
$title?=?"http://siyizhu.com測(cè)試模板";
$file?=?"TwoMax?Inter?test?templet,
author:Matrix@Two_Max";
$fp?=?fopen?("temp.html","r");
$content?=?fread?($fp,filesize?("temp.html"));
$content?=?str_replace?("{file}",$file,$content);
$content?=?str_replace?("{title}",$title,$content);?
//?生成列表開始
$list?=?'';
$sql?=?"select?id,title,filename?from?article";
$query?=?mysql_query?($sql);
while?($result?=?mysql_fetch_array?($query)){
$list?.=?''.$result['title'].'
';
}
$content?.=?str_replace?("{articletable}",$list,$content);?
//生成列表結(jié)束
//?echo?$content;?
$filename?=?"test/test.html";
$handle?=?fopen?($filename,"w");?//打開文件指針,創(chuàng)建文件
/*
檢查文件是否被創(chuàng)建且可寫
*/
if?(!is_writable?($filename)){
die?("文件:".$filename."不可寫,請(qǐng)檢查其屬性后重試!");
}
if?(!fwrite?($handle,$content)){?//將信息寫入文件
die?("生成文件".$filename."失??!");
}?
fclose?($handle);?//關(guān)閉指針?
die?("創(chuàng)建文件".$filename."成功!");
?>
二,分頁問題。
如我們指定分頁時(shí),每頁20篇。某子頻道列表內(nèi)文章經(jīng)數(shù)據(jù)庫查詢?yōu)?5條,則,首先我們通過查詢得到如下參數(shù):1,總頁數(shù);2,每頁篇數(shù)。第二步,for?($i?=?0;?$i?
$fp?=?fopen?("temp.html","r");
$content?=?fread?($fp,filesize?("temp.html"));
$onepage?=?'20';
$sql?=?"select?id?from?article?where?channel='$channelid'";
$query?=?mysql_query?($sql);
$num?=?mysql_num_rows?($query);
$allpages?=?ceil?($num?/?$onepage);
for?($i?=?0;$i if?($i?==?0){
$indexpath?=?"index.html";
}?else?{
$indexpath?=?"index_".$i."html";
}
$start?=?$i?*?$onepage;
$list?=?'';
$sql_for_page?=?"select?name,filename,title?from?article?where?channel='$channelid'?limit?$start,$onepage";
$query_for_page?=?mysql_query?($sql_for_page);
while?($result?=?$query_for_page){
$list?.=?''.$title.'
';
}
$content?=?str_replace?("{articletable}",$list,$content);
if?(is_file?($indexpath)){
@unlink?($indexpath);?//若文件已存在,則刪除
}
$handle?=?fopen?($indexpath,"w");?//打開文件指針,創(chuàng)建文件
/*
?檢查文件是否被創(chuàng)建且可寫
*/
if?(!is_writable?($indexpath)){
echo?"文件:".$indexpath."不可寫,請(qǐng)檢查其屬性后重試!";?//修改為echo
}
if?(!fwrite?($handle,$content)){?//將信息寫入文件
echo?"生成文件".$indexpath."失??!";?//修改為echo
}?
fclose?($handle);?//關(guān)閉指針
}
fclose?($fp);
die?("生成分頁文件完成,如生成不完全,請(qǐng)檢查文件權(quán)限系統(tǒng)后重新生成!");
?>
大致思路如此,其中如其它數(shù)據(jù)生成,數(shù)據(jù)輸入輸出檢查,分頁內(nèi)容指向等可酌情在頁面中加入。
在實(shí)際文章系統(tǒng)處理過程當(dāng)中,還有許多問題有待考慮,與動(dòng)態(tài)頁面不同之處,需注意的地方還有很多。但大致思路即是如此,其它方面可舉一反三而得。

Outils d'IA chauds

Undress AI Tool
Images de déshabillage gratuites

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
échangez les visages dans n'importe quelle vidéo sans effort grace à notre outil d'échange de visage AI entièrement gratuit?!

Article chaud

Outils chauds

Bloc-notes++7.3.1
éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

HtmlhaseVolvedSIGNICALYSICMANTSICTHER

Il s'agit d'une balise sémantique utilisée dans HTML5 pour définir le bas de la page ou du bloc de contenu, comprenant généralement des informations sur le droit d'auteur, des informations de contact ou des liens de navigation; Il peut être placé en bas de la page ou imbriqué, etc. Tags comme fin du bloc; Lorsque vous l'utilisez, vous devez prêter attention pour éviter des abus répétés et un contenu non pertinent.

ThetabindexAttributeControlShowElementsReceiveFocusViAThetAbkey, withThreemainValues: tabindex = "0" addSanElementTotheNaturalTaborder, tabindex = "- 1" Autorise le programme

Adeclarationisaformalstatementthatsomethingistrue, officiel, orrequired, a utilisétoclelydefineorannneanintent, fact, orrule.itplaysakeyroleinprogrammingydefiningVariblesandfunctions, inlegalcontextsbyreportingfactsunderroath, etIndailyLifeMakeintenti et

Loading = "Lazy" est un attribut HTML pour et qui permet la fonction de chargement paresseuse native du navigateur pour améliorer les performances de la page. 1. Il retarde le chargement des ressources non écrans, réduit le temps de chargement initial, enregistre la bande passante et les demandes de serveur; 2. Il convient à de grandes quantités d'images ou de contenu intégré en pages longues; 3. Il ne convient pas aux images de premier écran, aux petites ic?nes ou à la charge paresseuse à l'aide de JavaScript; 4. Il est nécessaire de coopérer avec les mesures d'optimisation telles que la réglage des tailles et la compression des fichiers pour éviter les décalages de mise en page et assurer la compatibilité. Lorsque vous l'utilisez, vous devez tester l'expérience de défilement et peser l'expérience utilisateur.

La clé pour utiliser des éléments pour représenter les zones de liaison de navigation est la sémantique et la structure claire, généralement en conjonction avec des liens organisationnels. 1. La structure de base consiste à mettre les liens parallèles et à les envelopper à l'intérieur, ce qui est amical aux outils auxiliaires et est propice au contr?le de style et au référencement; 2. Communément utilisé dans ou, pour placer des collections de navigation principale ou de liaison de pied de page; 3. Une page peut contenir plusieurs zones, telles que le menu principal, la barre latérale ou la navigation indépendante.

Lorsque vous écrivez un HTML légal et soigné, vous devez faire attention à une structure claire, à une sémantique correcte et à un format standardisé. 1. Utilisez la déclaration du type de document correct pour vous assurer que le navigateur analyse en fonction de la norme HTML5; 2. Gardez l'étiquette fermée et raisonnablement imbriquée pour éviter d'oublier des éléments de nidification fermés ou mauvais; 3. Utilisez des balises sémantiques telles que, etc. pour améliorer l'accessibilité et le référencement; 4. La valeur d'attribut est toujours enveloppée dans les devis et les devis simples ou doubles sont utilisés uniformément. Les attributs booléens n'ont qu'à exister, et le nom de classe doit être significatif et éviter les attributs redondants.

La structure de la page Web doit être prise en charge par des éléments HTML de base. 1. La structure globale de la page est composée de, qui est l'élément racine, qui stocke les méta-informations et affiche le contenu; 2. L'organisation de contenu s'appuie sur le titre (-), le paragraphe () et les balises de blocs (telles que) pour améliorer la structure organisationnelle et le référencement; 3. La navigation est mise en ?uvre et la mise en ?uvre, les organisations couramment utilisées sont liées et complétées par un attribut Aria-Current pour améliorer l'accessibilité; 4. L'interaction de formulaire implique, et, pour assurer les fonctions complètes d'entrée et de soumission de l'utilisateur. Une utilisation appropriée de ces éléments peut améliorer la clarté de la page, la maintenance et l'optimisation des moteurs de recherche.
