PHP總結我的簡單靜態(tài)頁生成 過程,
Jun 08, 2016 pm 05:33 PM一、用到的相關技術關鍵詞:PHP, Apache,
? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???mod_rewrite (RewriteCond,RewriteRule)地址重寫,
? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???ob系列函數緩沖
? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???file_put_contents生成html
二、流程:用戶發(fā)出請求url?id=x ,判斷文章是否存在
? ?? ?? ?? ?? ?? ?? ?? ?(1)存在則直接轉到對應的Html頁面。
? ?? ?? ?? ?? ?? ?? ?? ?(2)不存在通過php讀取數據庫數據,然后生成html文件,并存放到指定目錄。
三、實現方法:
(1)地址重寫用Apahce的mod_rewrite模塊中的RewriteRule指令實現重寫(mod_rewrite的開啟和簡單規(guī)則見本博另一篇http://hi.baidu.com/alex%5Fwang5 ... 0346ffb3fb952e.html )。
(2)判斷文章是否存在用Apahce 的mod_rewrite模塊中的RewriteCond指令
(3)生成html文件:
? ?? ?? ???ob_star()打開緩沖,將讀取文章的php包含進來,然后用file_put_contents將獲得的緩沖內容寫入指定HTMl文件。
四、代碼
/Test 目錄下的 .htaccess 文件內容:
RewriteEngine On
RewriteRule ^index.html$ /news.php [L]
RewriteCond %{REQUEST_FILENAME}??!-s
RewriteRule ^html/news_([0-9]+).html$ getnews.php?id=$1 [L]
對news.php的訪問將通過 localhost/Test/index.html 實現由第二句 RewriteRule ^index.html$ Test/news.php [L] 實現
news.php =============================> news.php將列出文章標題鏈接。
PHP代碼:
<span style="color: #000000"><br>
<font face="新宋體"><span style="color: #0000bb"><?php <br />
header</span><span style="color: #007700">(</span><span style="color: #dd0000">"Content-Type:text/html;?charset=gbk"</span><span style="color: #007700">);?</span></font><font face="新宋體"><span style="color: #ff8000">//以防出現亂碼<br>
</span><span style="color: #0000bb">mysql_connect</span><span style="color: #007700">(</span><span style="color: #dd0000">"localhost"</span><span style="color: #007700">,</span><span style="color: #dd0000">"root"</span><span style="color: #007700">,</span><span style="color: #dd0000">""</span></font><font face="新宋體"><span style="color: #007700">);<br>
</span><span style="color: #0000bb">mysql_query</span><span style="color: #007700">(</span><span style="color: #dd0000">'SET?NAMES?gbk'</span><span style="color: #007700">);?</span></font><font face="新宋體"><span style="color: #ff8000">//我的數據庫用的gbk編碼,請根據自己實際情況調整<br>
</span><span style="color: #0000bb">mysql_select_db</span><span style="color: #007700">(</span><span style="color: #dd0000">"test"</span></font><font face="新宋體"><span style="color: #007700">);<br>
<br>
</span><span style="color: #0000bb">$sql?</span><span style="color: #007700">=?</span><span style="color: #dd0000">"SELECT?`id`,`title`?FROM?`arc`?order?by?`id`?DESC"</span></font><font face="新宋體"><span style="color: #007700">;<br>
</span><span style="color: #0000bb">$rs?</span><span style="color: #007700">=?</span><span style="color: #0000bb">mysql_query</span><span style="color: #007700">(</span><span style="color: #0000bb">$sql</span></font><font face="新宋體"><span style="color: #007700">);<br>
while(</span><span style="color: #0000bb">$row?</span><span style="color: #007700">=?</span><span style="color: #0000bb">mysql_fetch_array</span><span style="color: #007700">(</span><span style="color: #0000bb">$rs</span></font><font face="新宋體"><span style="color: #007700">)?){<br>
echo?</span><span style="color: #dd0000">"<a>$row[title]</a><br>"</span></font><font face="新宋體"><span style="color: #007700">;<br>
}<br>
</span><span style="color: #0000bb">?></span><br>
</font></span><br>
比如生成了php靜態(tài)頁實現
當點擊鏈接發(fā)出對 http://localhost/Test/html/news_3.html 的請求時
Apache將會判斷 news_3.html??是否存在,由 .htaccess中的第三句
RewriteCond %{REQUEST_FILENAME}??!-s
實現:
? ???RewriteCond??是“定向重寫發(fā)生條件”。REQUEST_FILENAME 這個參數是“客戶端請求的文件名”
'-s'??(是一個非空的常規(guī)文件[size]) 測試指定文件是否存在而且是一個尺寸大于0的常規(guī)的文件.??!表示匹配條件的反轉。
所以 RewriteCond 這句就表示當請求鏈接不存在時 執(zhí)行下面的 RewriteRule 規(guī)則。
所以當請求的news_3.html 不存在時會重寫地址讓 getnews.php?id=3 來處理(否則如果news_3.html 存在則直接就加載該html文件)。
getnews.php ===================>功能:判斷參數傳輸的完整性,并調用相應文件生成html文件。
PHP代碼:
<span style="color: #000000"><br>
<font face="新宋體"><span style="color: #0000bb"><?php <br />
$id?</span><span style="color: #007700">=</span><span style="color: #0000bb">$_GET</span><span style="color: #007700">[</span><span style="color: #dd0000">'id'</span></font><font face="新宋體"><span style="color: #007700">];<br>
</span><span style="color: #0000bb">$root?</span><span style="color: #007700">=&?</span><span style="color: #0000bb">$_SERVER</span><span style="color: #007700">[</span><span style="color: #dd0000">'DOCUMENT_ROOT'</span></font><font face="新宋體"><span style="color: #007700">];<br>
</span><span style="color: #0000bb">$filename?</span><span style="color: #007700">=?</span><span style="color: #dd0000">"news_"</span><span style="color: #007700">.</span><span style="color: #0000bb">$id</span><span style="color: #007700">.</span><span style="color: #dd0000">".html"</span></font><font face="新宋體"><span style="color: #007700">;<br>
</span><span style="color: #0000bb">$file?</span><span style="color: #007700">=?</span><span style="color: #0000bb">$root</span><span style="color: #007700">.</span><span style="color: #dd0000">"/Test/html/"</span><span style="color: #007700">.</span><span style="color: #0000bb">$filename</span></font><font face="新宋體"><span style="color: #007700">;<br>
</span><span style="color: #0000bb">ob_start</span></font><font face="新宋體"><span style="color: #007700">();<br>
include(</span><span style="color: #0000bb">$root</span><span style="color: #007700">.</span><span style="color: #dd0000">"/Test/newsDetail.php"</span></font><font face="新宋體"><span style="color: #007700">);<br>
</span><span style="color: #0000bb">file_put_contents</span><span style="color: #007700">(</span><span style="color: #0000bb">$file</span><span style="color: #007700">,</span><span style="color: #0000bb">ob_get_contents</span></font><font face="新宋體"><span style="color: #007700">());<br>
</span><span style="color: #0000bb">ob_end_flush</span></font><font face="新宋體"><span style="color: #007700">();?<br>
</span><span style="color: #0000bb">?></span><br>
</font></span><br>
newsDetail.php ====================> 從數據庫中讀取數據,產生新聞內容,內容被getnews.php捕獲
PHP代碼:
<span style="color: #000000"><br>
<font face="新宋體"><span style="color: #0000bb"><?php <br />
header</span><span style="color: #007700">(</span><span style="color: #dd0000">"Content-Type:text/html;?charset=gbk"</span></font><font face="新宋體"><span style="color: #007700">);<br>
if(?isset(</span><span style="color: #0000bb">$_GET</span><span style="color: #007700">[</span><span style="color: #dd0000">'id'</span></font><font face="新宋體"><span style="color: #007700">])?){<br>
</span><span style="color: #0000bb">$id?</span><span style="color: #007700">=?&?</span><span style="color: #0000bb">$_GET</span><span style="color: #007700">[</span><span style="color: #dd0000">'id'</span></font><font face="新宋體"><span style="color: #007700">];<br>
}else{<br>
</span><span style="color: #0000bb">header</span><span style="color: #007700">(</span><span style="color: #dd0000">"Location:?[url]http://127.0.0.1/lean/Test/html/news_failed.html[/url]"</span></font><font face="新宋體"><span style="color: #007700">);<br>
exit();<br>
}<br>
</span><span style="color: #0000bb">mysql_connect</span><span style="color: #007700">(</span><span style="color: #dd0000">"localhost"</span><span style="color: #007700">,</span><span style="color: #dd0000">"root"</span><span style="color: #007700">,</span><span style="color: #dd0000">""</span></font><font face="新宋體"><span style="color: #007700">);<br>
</span><span style="color: #0000bb">mysql_query</span><span style="color: #007700">(</span><span style="color: #dd0000">'SET?NAMES?gbk'</span></font><font face="新宋體"><span style="color: #007700">);<br>
</span><span style="color: #0000bb">mysql_select_db</span><span style="color: #007700">(</span><span style="color: #dd0000">"test"</span></font><font face="新宋體"><span style="color: #007700">);<br>
</span><span style="color: #0000bb">$id?</span><span style="color: #007700">=</span><span style="color: #0000bb">$_GET</span><span style="color: #007700">[</span><span style="color: #dd0000">'id'</span></font><font face="新宋體"><span style="color: #007700">];<br>
<br>
</span><span style="color: #0000bb">$sql?</span><span style="color: #007700">=?</span><span style="color: #dd0000">"SELECT?`news`?FROM?`arc`?WHERE?`id`=$id"</span></font><font face="新宋體"><span style="color: #007700">;<br>
</span><span style="color: #0000bb">$rs?</span><span style="color: #007700">=?</span><span style="color: #0000bb">mysql_query</span><span style="color: #007700">(</span><span style="color: #0000bb">$sql</span></font><font face="新宋體"><span style="color: #007700">);<br>
while(</span><span style="color: #0000bb">$row?</span><span style="color: #007700">=?</span><span style="color: #0000bb">mysql_fetch_array</span><span style="color: #007700">(</span><span style="color: #0000bb">$rs</span></font><font face="新宋體"><span style="color: #007700">)?){<br>
echo?</span><span style="color: #0000bb">$row</span><span style="color: #007700">[</span><span style="color: #dd0000">'news'</span></font><font face="新宋體"><span style="color: #007700">];<br>
}<br>
</span><span style="color: #0000bb">?></span><br>
</font></span><br>
這樣將會在/Test/html 目錄下產生以 news_文章ID.html 命名的html文件。
PS: 一開始在判斷是否存在相應html頁面時采用的是 php 內置的 file_exists() 判斷,而不用Apache的 RewriteCond,也即沒有 RewriteCond %{REQUEST_FILENAME}??!-s??此瓶尚?,但結果會產生“循環(huán)重定向”的問題。
? ?? ? 當news_3.html 不存在時 我們需要用 getnews.php生成news_3.html ,生成完畢后需要轉向到 news_3.html ,于是又形成了一次請求mod_rewrite又啟動把 news_3.html重寫為 getnews.php?id=3 這就形成了死循環(huán)了。所以把文件存在性的判斷交給 RewriteCond ,指定的html文件不存在時才啟用重寫規(guī)則。這樣循環(huán)重定向的問題就沒有了。
? ?? ? 一開始沒有采用fopen打開newsDetail.php,然后再將生成的內容fwrite成html文件,然后include輸出靜態(tài)頁面。后來在fhjr999的提醒下,改為:將newDetail.php包含進getnews.php,通過ob系列函數將生成的內容放入緩沖,然后再生成html文件。ob的效率是前者的20倍左右。

Alat AI Hot

Undress AI Tool
Gambar buka pakaian secara percuma

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Penggunaan rasional tag semantik dalam HTML dapat meningkatkan kejelasan struktur halaman, aksesibilitas dan kesan SEO. 1. Digunakan untuk blok kandungan bebas, seperti jawatan blog atau komen, ia mesti mandiri; 2. Digunakan untuk kandungan berkaitan klasifikasi, biasanya termasuk tajuk, dan sesuai untuk modul yang berlainan halaman; 3. Digunakan untuk maklumat tambahan yang berkaitan dengan kandungan utama tetapi tidak teras, seperti cadangan sidebar atau profil pengarang. Dalam perkembangan sebenar, label harus digabungkan dan lain -lain, elakkan bersarang yang berlebihan, pastikan struktur mudah, dan sahkan rasionalitas struktur melalui alat pemaju.

Inphp, variablesarepassedbyvalueDefault, arequFunctionsorassignmentsReceiveacopyofthedata, sementara

Untuk mengendalikan muat naik fail PHP dengan selamat, anda perlu mengesahkan sumber dan jenis, mengawal nama fail dan laluan, menetapkan sekatan pelayan, dan memproses fail media dua kali. 1. Sahkan sumber muat naik untuk mengelakkan CSRF melalui token dan mengesan jenis mime sebenar melalui finfo_file menggunakan kawalan putih; 2. Namakan semula fail ke rentetan rawak dan tentukan pelanjutan untuk menyimpannya dalam direktori bukan web mengikut jenis pengesanan; 3. Konfigurasi PHP mengehadkan saiz muat naik dan direktori sementara Nginx/Apache melarang akses ke direktori muat naik; 4. Perpustakaan GD menyambung semula gambar -gambar untuk membersihkan data yang berpotensi.

Bonk soars! Aplikasi ETF, kejayaan teknologi dan kekuatan Solana adalah kunci. Adakah ini permulaan revolusi mata wang meme, atau adakah gelembung lain? Bonketf Craze: Pemangkin untuk Meme Coin Takeoff? Harga bonk telah meningkat hampir 20% dalam 24 jam yang lalu, didorong oleh jangkaan ETF, kenaikan teknikal dan prestasi yang kukuh rangkaian Solana. Adakah bonketf akan menjadi pemangkin untuk revolusi mata wang meme? Aplikasi ETF menyalakan semangat pasaran. Permohonan bonketf dua kali ganda yang dikemukakan oleh TuttlecapitalManagement telah menjadi daya penggerak yang penting pada masa ini. Dokumen yang berkaitan menunjukkan bahawa ETF boleh dilancarkan secara rasmi sebaik sahaja 16 Julai. Berita ini telah memberi inspirasi kepada pelabur untuk melabur dalam produk pelaburan Bonk berstruktur

Cara yang paling langsung untuk mencari kejadian terakhir substring dalam PHP ialah menggunakan fungsi StrrpOS (). 1. Gunakan fungsi strrpos () untuk mendapatkan indeks kejadian terakhir substring dalam rentetan utama. Jika ia tidak dijumpai, ia mengembalikan palsu. Sintaks adalah strrpos ($ haystack, $ jarum, $ offset = 0). 2. Jika anda perlu mengabaikan kes, anda boleh menggunakan fungsi strripos () untuk melaksanakan carian kes-insensitif. 3. Bagi watak multi-bait seperti Cina, fungsi MB_STRRPOS () dalam lanjutan MBSTRING harus digunakan untuk memastikan kedudukan watak dikembalikan dan bukannya kedudukan byte. 4. Perhatikan bahawa strrpos () pulangan f

Sebab mengapa header ('Lokasi: ...') Dalam permintaan Ajax tidak sah adalah bahawa penyemak imbas tidak akan secara automatik melakukan pengalihan halaman. Kerana dalam permintaan AJAX, kod status 302 dan maklumat header lokasi yang dikembalikan oleh pelayan akan diproses sebagai data tindak balas, dan bukannya mencetuskan tingkah laku lompat. Penyelesaian adalah: 1. Kembali data JSON dalam PHP dan termasuk URL Jump; 2. Semak medan redirect di hadapan Ajax callback dan lompat secara manual dengan window.location.href; 3. Pastikan output PHP hanya JSON untuk mengelakkan kegagalan parsing; 4. Untuk menangani masalah lintas domain, anda perlu menetapkan tajuk CORS yang sesuai; 5. Untuk mengelakkan gangguan cache, anda boleh menambah cap waktu atau tetapkan cache: f

Gunakan tag dalam HTML untuk pilihan kumpulan dalam menu drop-down. Kaedah khusus adalah untuk membungkus sekumpulan elemen dan menentukan nama kumpulan melalui atribut label, seperti: 1 mengandungi pilihan seperti epal, pisang, oren, dan lain -lain; 2. Mengandungi pilihan seperti wortel, brokoli, dan sebagainya; 3. Nota termasuk: ① Tiada sarang disokong; ② Seluruh kumpulan boleh dilumpuhkan melalui atribut yang kurang upaya; ③ Gaya ini terhad dan perlu dihidupkan dalam kombinasi dengan CSS atau perpustakaan pihak ketiga; Plug-in seperti SELECT2 boleh digunakan untuk meningkatkan fungsi.

Untuk menggunakan elemen butang HTML untuk mencapai butang yang boleh diklik, anda mesti menguasai penggunaan asas dan langkah berjaga -jaga yang sama. 1. Buat butang dengan tag dan tentukan tingkah laku melalui atribut jenis (seperti butang, hantar, tetapkan semula), yang dikemukakan secara lalai; 2. Tambahkan fungsi interaktif melalui JavaScript, yang boleh ditulis dalam talian atau mengikat pendengar acara melalui ID untuk meningkatkan penyelenggaraan; 3. Gunakan CSS untuk menyesuaikan gaya, termasuk warna latar belakang, sempadan, sudut bulat dan kesan status hover/aktif untuk meningkatkan pengalaman pengguna; 4. Perhatikan masalah biasa: Pastikan atribut kurang upaya tidak didayakan, peristiwa JS terikat dengan betul, oklusi susun atur, dan gunakan bantuan alat pemaju untuk menyelesaikan masalah. Menguasai ini
