用動(dòng)態(tài)網(wǎng)頁(yè)技術(shù)PHP打造個(gè)人網(wǎng)站全攻略_PHP教程
推薦:論Web 2.0 時(shí)代PHP的地位隨著所謂WEB2.0時(shí)代來(lái)臨,程序員從來(lái)沒(méi)有時(shí)代象今天那樣受人注意,很多程序員對(duì)于語(yǔ)言的爭(zhēng)論也從來(lái)沒(méi)有象今天這樣劇烈,JAVA、C 、PHP、ASP等等,最近又出來(lái)一個(gè)Ruby,加上Python。無(wú)數(shù)的FANS
這里和大家交流一下用動(dòng)態(tài)網(wǎng)頁(yè)技術(shù)PHP來(lái)架設(shè)個(gè)人網(wǎng)站的經(jīng)驗(yàn)。不妥之處,敬請(qǐng)指正!
一 編輯調(diào)試環(huán)境
win98本地編輯調(diào)試,爽不爽?先下一個(gè)Omnihttpd Proffesinal V2.06 ,裝上就有PHP4beta3可以用了。如果你較懂HTML,推薦用EditPlus,相當(dāng)好哦!否則只好用DreamWeaver先了。還要連數(shù)據(jù)庫(kù)?幸好MySQL還有For WIN32的版本。
二 先來(lái)一個(gè)計(jì)數(shù)器
自己的計(jì)數(shù)器總比外來(lái)的好,敝帚自珍嘛!時(shí)下介紹的計(jì)數(shù)器源代碼總是那種刷新一下就長(zhǎng),不免有些自欺欺人,呵呵。不過(guò)我們還是先分析一下它的工作原理吧,下面是一個(gè)簡(jiǎn)單計(jì)數(shù)器的示例:
| 以下為引用的內(nèi)容: <php $countfile="count.txt"; if(file_exists($countfile)) { $fp=fopen($countfile,"r "); $count=fgets($fp,5); $count =1; rewind($fp); fputs($fp,$count,5); fclose($fp); } else { $fp=fopen($countfile,"w"); $count="1"; fputs($fp,$count,5); fclose($fp); }; ?> |
這個(gè)計(jì)數(shù)器有個(gè)外號(hào),叫一刷就長(zhǎng)^_^。那么,怎么才能使計(jì)數(shù)器更真實(shí)一點(diǎn)呢?PHP4給我們帶來(lái)一個(gè)簡(jiǎn)單的方法,就是使用SESSION(會(huì)話)級(jí)變量。一進(jìn)頁(yè)面,先檢驗(yàn)SESSION中COUNT是否存在并等于你想要的值,不等于則使等于先,然后調(diào)用計(jì)數(shù)過(guò)程,會(huì)話結(jié)束后,就可以對(duì)COUNT說(shuō):ByeBye了您吶!
但是如果不是PHP4又該怎么辦?不知道你還記得cookie否?我們可以假設(shè)某人在15分鐘以內(nèi)(或別的時(shí)間段內(nèi))對(duì)你的網(wǎng)頁(yè)的請(qǐng)求都不屬于一個(gè)新的人次,這樣你可以做個(gè)計(jì)數(shù)的過(guò)程存在INC里,在每一個(gè)頁(yè)面引用,訪客第一次進(jìn)入時(shí)將訪問(wèn)時(shí)間送到cookie里。以后每個(gè)頁(yè)面被訪問(wèn)時(shí)都檢查cookie上次訪問(wèn)時(shí)間值。比較一下,若差別大于十五分鐘則計(jì)數(shù),否則將時(shí)間刷新。(你不會(huì)連cookie怎么用都不知道吧?呵呵,推薦一本書(shū)《PHP核心編程》,清華版的,查函數(shù)還夠用,每個(gè)函數(shù)都有使用示例:-D)
不過(guò),剛才的計(jì)數(shù)器毫無(wú)美觀可言,估計(jì)你是肯定不滿意了,換個(gè)圖形的吧。做一套0.jpg,1.jpg……9.jpg。剛才不是讀入一個(gè)字串嗎?先查查串長(zhǎng),輸入你期望的長(zhǎng)度(如5)減去串長(zhǎng)(去掉空格后的)個(gè)零,然后從頭一個(gè)一個(gè)截?cái)?shù)字(其實(shí)還是字符),與“.jpg”組合后輸出,圖形計(jì)數(shù)器不就出來(lái)了嗎?
好了,一個(gè)個(gè)人用的計(jì)數(shù)器就已經(jīng)比較完美了.
三 首頁(yè)新聞發(fā)布,讓你更新更輕松(上)
每次在首頁(yè)中增加一條消息,加兩句話,就得整個(gè)頁(yè)面都上傳一遍,真是不值!于是象藍(lán)風(fēng)這種懶漢就想了一個(gè)一勞永逸的辦法,真正的動(dòng)態(tài)實(shí)時(shí),遠(yuǎn)程管理編輯,自動(dòng)維護(hù)功能。也可以用來(lái)做虛擬社區(qū)的公告板。(如果改吧改吧,就可以把你的新聞中心的新聞在首頁(yè)自動(dòng)生成提要了,呵呵。)這么多功能,大家多多原諒,嘿嘿。
先插幾句題外話,我們做網(wǎng)站時(shí),是用html中間點(diǎn)綴PHP呢,還是用PHP來(lái)生成html?專業(yè)的站點(diǎn)可以把一個(gè)功能集中在一頁(yè),通過(guò)這一頁(yè)調(diào)用不同的模塊來(lái)實(shí)現(xiàn)各個(gè)子功能(這樣客戶端是不是就只有一頁(yè)了呢?我沒(méi)有試過(guò))。不管怎樣,功能模塊化的軟件復(fù)用是高效率開(kāi)發(fā)的一個(gè)重要方法(也能節(jié)省你的主機(jī)空間哦^_^)。
好了,下面我們就一起來(lái)把功能模塊化吧。初學(xué)者請(qǐng)仔細(xì)閱讀代碼,尤其要注意基本函數(shù)的用法。高手就可以略過(guò)這一段了,呵呵(這么認(rèn)真干嗎?都看得人家不好意思了9-。
| 以下為引用的內(nèi)容: <?php /*head.php 為了避免被別人直接鍵入head.inc下載你的源代碼,最好用php做后綴,這樣,你的服務(wù)器才會(huì)先截獲它進(jìn)行處理,呵呵*/ echo "<html><head><title>" echo ""//如果標(biāo)題常變,可做一個(gè)函數(shù)。 echo "</title></head>" ?> 這是一個(gè)寫(xiě)html頭的一功能塊。 <?php /*makestr.php 定義一個(gè)公用處理文本中超鏈接的函數(shù),假定文本中鏈接形式為${http://www.hl5o.cn|}*/ function makestr($text) { $str=$text; $a=strstr($s,'$}');//切除在$s中‘${'之前的子串 if($a){ $b=strstr($a,'}'); if($b){ $la=strlen($a);$ls=strlen($s);//取串長(zhǎng) $s=substr($a,0,$ls-$la);//取子串,第二個(gè)參數(shù)為起點(diǎn),第三個(gè)參數(shù)為取字符的個(gè)數(shù) $a=substr($a,2);//去掉'${' $lb=strlen($b);$la=strlen($a); $a=substr($a,0,$la-$lb);//取出超鏈接部分 $b=substr($b,1);//去掉'}' $ta=strstr($a,"|");//尋找是否存在需要做鏈接的文字 if($ta){ $la=strlen($a);$lt=(strlen($ta); $linktext=substr($a,$la-$lt 1); $a=substr($a,0,$la-$lt); } else{ $linktext=$a; } $s=$s."<a herf="".$a."">.$linktext."</a>.$b;//準(zhǔn)備返回字串 } } return($s); } |
三 首頁(yè)新聞發(fā)布,讓你更新更輕松(中)
上次我們做了一個(gè)文件頭(至于文件尾,請(qǐng)大家自己做,假設(shè)為tail.php),一個(gè)函數(shù)的模塊,現(xiàn)在,我們來(lái)一個(gè)基本功能的實(shí)現(xiàn),也就是動(dòng)態(tài)發(fā)布啦
| 以下為引用的內(nèi)容: <?php include("makestr.php"; include("head.php"); $newspath="/announce/"; //以文本文件存放的新聞文件的目錄 $newsfile=array();//準(zhǔn)備新聞數(shù)組 $hd=dir($newspath); //目錄句柄 while($filename=$hd->read()){ //獲取全部文件 $s=strtolower($filename); if(strstr($s,".txt")){ //檢測(cè)最新的修改日期 $lastchanged=fileatime($newspath.$filename); $newsfile[$filename]=$lastchanged; } } arsort($newsfile); //文件按時(shí)間排序 //輸出文件 for(reset($newsfile);$key=key($newsfile);next($newsfile)) {$fa=file($newspath.$key); $n=count($fa); echo "<p>".date("d.m.Y-H:i:s".$newsfile[$key])."<br>\n"; for($i=0;$i<$n;$i=$i 1){ $s=chop($fa[$i]);//去除空格 $s=htmlspecialchars($s); print $s."</p>\n"; } } $hd->close(); //釋放句柄 include("tail.php"); ?> |
這樣,將你的新聞文本傳上你根目錄的annouce子目錄下,就可以方便發(fā)布新聞了。但真正的方便還不在于這,比如說(shuō),當(dāng)新聞過(guò)時(shí)的時(shí)候,程序能自動(dòng)刪除它,多好。不用ftp,直接在線寫(xiě)下要新發(fā)的公告,多方便。好了,且聽(tīng)下回分解。
三 首頁(yè)新聞發(fā)布,讓你更新更輕松(下)
上一講里,我們已經(jīng)實(shí)現(xiàn)了首頁(yè)新聞發(fā)布的基本功能。在這一講里,我們?cè)俳o它添磚加瓦,使它的功能更為強(qiáng)大。(一個(gè)好用的軟件,其實(shí)也就是基本功能加上一批附屬功能,這些附屬功能主要也是圖個(gè)方便而已,呵呵)
首先,我們?cè)倜鞔_一下我們想獲得什么方便。我們不希望幾十天以前的東西我們忘了刪除,結(jié)果還作為新聞發(fā)布在首頁(yè)(很丟臉的哦^&^)。如果我們?cè)诨緦?shí)現(xiàn)中嵌入一段代碼,比如說(shuō)用filectime($filename),那么在UNIX下,我們就可以得到從1970年1月1日起以秒計(jì)到最后一次文件被改動(dòng)的時(shí)間(在WINDOWS下返回的是文件生成的日期時(shí)間),而從 1970年1月1日起以秒計(jì)到現(xiàn)在的秒數(shù)可以用$mynow=mktime()來(lái)獲得,減法,判斷,IF >我們期望的時(shí)間,嘿嘿,Sorry,unlink($newspath.$filename)……什么?!您問(wèn)這段代碼應(yīng)該放在哪兒?您說(shuō)呢,呵呵。
或許,你并不是常在一臺(tái)機(jī)器上上網(wǎng),當(dāng)你獲得了一條新的新聞后卻不在你的愛(ài)機(jī)旁,怎么辦?最理想的莫過(guò)于在主頁(yè)上上傳文件咯。你或許有一個(gè)頁(yè)面(Admin?)需要用密碼才能進(jìn)入(假如你還愛(ài)惜自己的網(wǎng)站的話,這是有必要的,最好連文件名都不要讓別人知道,呵呵)。下面是一段到處可見(jiàn)的文件上載的代碼:
| 以下為引用的內(nèi)容: <? <? |
這里我們又見(jiàn)到了PHP和HTML結(jié)合的一種形式,可以借鑒。文件上載雖然方便,但總給人一種不安全感。一旦泄密,你的服務(wù)器的系統(tǒng)安全就受到了威脅,因?yàn)樯陷d的文件可能是一些破壞性的執(zhí)行文件(也就是病毒或黑客程序啦)穩(wěn)妥的做法是寫(xiě)一個(gè)在線編輯的文件,下面是一個(gè)示例:
| 以下為引用的內(nèi)容: 〈?php function mywritefile($filename,$contents){ if($fp=fopen($filename,"w")){ fwrite($fp,strpslashes($contents)); fclose($fp); return 1; } else {return 0;}; }; //判斷表單返回的變量 if($submitButton=="完成"){ $rs=mywritefile("$page","$test"); echo "<a href ="$page">$page</a><br>"; } elseif($action=="page") //變量action值為"page"的情況 {$contents="$page"; $fp=@fopen($content,"w ")or die('Could not open file!'); $contents=htmlspecialchars($contents); fclose($fp); echo "<form action="admin.php?page=$page" method="POST" wrap=soft>"; echo "$contents"; echo "</textarea>"; echo "<input type="submit" name="submitButton" value="完成">"; echo "</form>"; } else {echo "<form action="basename($PHP_SELF).?action=page" method="POST">";//注意引用程序內(nèi)變量的方式。 echo "<input type=text size=20 name=page>"; echo "<input type="submit" name="send" value="選定">"; echo "</form>"; } ?> |
至此,首頁(yè)新聞發(fā)布的實(shí)現(xiàn)已經(jīng)可以告一段落了。 我們可以發(fā)現(xiàn),任何一個(gè)功能(比較)強(qiáng)大的陳程式都是由一些簡(jiǎn)單的功能組合而成的。第三部分功能的整個(gè)完善過(guò)程使用疊加增強(qiáng)的方法,和軟件工程的自頂向下,逐層分析的開(kāi)發(fā)方法是不一樣的。這是一個(gè)適用于學(xué)習(xí)的方法,自己寫(xiě)寫(xiě)習(xí)作還是挺管用的,呵呵。
分享:用javascript php隨機(jī)顯示圖片想必你會(huì)用javascript隨機(jī)顯示圖片。但如果圖片的資料(比如鏈接)是經(jīng)常變化,或是由用戶修改、增加的,怎么辦?我這里有個(gè)辦法。 把圖片的資料(如名稱、地址、鏈接等)放在一個(gè)TXT文件里(如有MYS
- PHPNOW安裝Memcached擴(kuò)展方法詳解
- php記錄頁(yè)面代碼執(zhí)行時(shí)間
- PHP中獎(jiǎng)概率的抽獎(jiǎng)算法程序代碼
- apache設(shè)置靜態(tài)文件緩存方法介紹
- php對(duì)圖像的各種處理函數(shù)代碼小結(jié)
- PHP 關(guān)于訪問(wèn)控制的和運(yùn)算符優(yōu)先級(jí)介紹
- 關(guān)于PHP語(yǔ)言構(gòu)造器介紹
- php/js獲取客戶端mac地址的實(shí)現(xiàn)代碼
- php5.5新數(shù)組函數(shù)array_column使用
- PHP preg_match的匹配多國(guó)語(yǔ)言的技巧
- php 中序列化和json使用介紹
- php采集文章中的圖片獲取替換到本地
PHP教程Rss訂閱編程教程搜索
PHP教程推薦
- 給wordpress 增加干擾碼防采集
- 實(shí)用:動(dòng)態(tài)網(wǎng)頁(yè)制作技術(shù)PHP的十個(gè)應(yīng)用技巧
- 百度網(wǎng)盤(pán)文件直鏈PHP代碼
- php防止sql注入的函數(shù)介紹
- 創(chuàng)建XML Http Request對(duì)象兩個(gè)的方法
- 如何實(shí)現(xiàn)強(qiáng)大的翻頁(yè)跳轉(zhuǎn)功能
- php判斷終端是手機(jī)還是電腦訪問(wèn)網(wǎng)站代碼
- PHP刪除HTMl標(biāo)簽的實(shí)現(xiàn)代碼
- 淺談PHP5 OOP編程之代理與定制異常(1)
- 基于HBase Thrift接口的一些使用問(wèn)題及相關(guān)注意事項(xiàng)的詳解
- 相關(guān)鏈接:
復(fù)制本頁(yè)鏈接| 搜索用動(dòng)態(tài)網(wǎng)頁(yè)技術(shù)PHP打造個(gè)人網(wǎng)站全攻略
- 教程說(shuō)明:
PHP教程-用動(dòng)態(tài)網(wǎng)頁(yè)技術(shù)PHP打造個(gè)人網(wǎng)站全攻略
。