這里和大家交流一下架設個人網站的經驗。不妥之處,敬請指正!
一 編輯調試環境
win98本地編輯調試,爽不爽?先下一個omnihttpd proffesinal v2.06 ,裝上就有php4beta3可以用了。如果你較懂html,推薦用editplus,相當好哦!否則只好用dreamweaver先了。還要連數據庫?幸好mysql還有for win32的版本。
二 先來一個計數器
自己的計數器總比外來的好,敝帚自珍嘛!時下介紹的計數器源代碼總是那種刷新一下就長,不免有些自欺欺人,呵呵。不過我們還是先分析一下它的工作原理吧,下面是一個簡單計數器的示例:
<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);
};
?>
這個計數器有個外號,叫一刷就長^_^。那么,怎么才能使計數器更真實一點呢?php4給我們帶來一個簡單的方法,就是使用session(會話)級變量。一進頁面,先檢驗session中count是否存在并等于你想要的值,不等于則使等于先,然后調用計數過程,會話結束后,就可以對count說:byebye了您吶!
但是如果不是php4又該怎么辦?不知道你還記得cookie否?我們可以假設某人在15分鐘以內(或別的時間段內)對你的網頁的請求都不屬于一個新的人次,這樣你可以做個計數的過程存在inc里,在每一個頁面引用,訪客第一次進入時將訪問時間送到cookie里。以后每個頁面被訪問時都檢查cookie上次訪問時間值。比較一下,若差別大于十五分鐘則計數,否則將時間刷新。(你不會連cookie怎么用都不知道吧?呵呵,推薦一本書《php核心編程》,清華版的,查函數還夠用,每個函數都有使用示例:-d)
不過,剛才的計數器毫無美觀可言,估計你是肯定不滿意了,換個圖形的吧。做一套0.jpg,1.jpg……9.jpg。剛才不是讀入一個字串嗎?先查查串長,輸入你期望的長度(如5)減去串長(去掉空格后的)個零,然后從頭一個一個截數字(其實還是字符),與“.jpg”組合后輸出,圖形計數器不就出來了嗎?
好了,一個個人用的計數器就已經比較完美了.
三 首頁新聞發布,讓你更新更輕松(上)
--------每次在首頁中增加一條消息,加兩句話,就得整個頁面都上傳一遍,真是不值!于是象藍風這種懶漢就想了一個一勞永逸的辦法,真正的動態實時,遠程管理編輯,自動維護功能。也可以用來做虛擬社區的公告板。(如果改吧改吧,就可以把你的新聞中心的新聞在首頁自動生成提要了,呵呵。)這么多功能,大家多多原諒,嘿嘿。
--------先插幾句題外話,我們做網站時,是用html中間點綴php呢,還是用php來生成html?專業的站點可以把一個功能集中在一頁,通過這一頁調用不同的模塊來實現各個子功能(這樣客戶端是不是就只有一頁了呢?我沒有試過)。不管怎樣,功能模塊化的軟件復用是高效率開發的一個重要方法(也能節省你的主機空間哦^_^)。
--------好了,下面我們就一起來把功能模塊化吧。初學者請仔細閱讀代碼,尤其要注意基本函數的用法。高手就可以略過這一段了,呵呵(這么認真干嗎?都看得人家不好意思了9-()。
<?php
/*head.php 為了避免被別人直接鍵入head.inc下載你的源代碼,最好用php做后綴,這樣,你的服務器才會先截獲它進行處理,呵呵*/
echo "<html><head><title>"
echo "網管之路"http://如果標題常變,可做一個函數。
echo "</title></head>"
?>
這是一個寫html頭的一功能塊。
<?php
/*makestr.php 定義一個公用處理文本中超鏈接的函數,假定文本中鏈接形式為${http://www.yoyonow.net|網管之路}*/
function makestr($text)
{ $str=$text;
$a=strstr($s,'$}');//切除在$s中‘${'之前的子串
if($a){
$b=strstr($a,'}');
if($b){
$la=strlen($a);$ls=strlen($s);//取串長
$s=substr($a,0,$ls-$la);//取子串,第二個參數為起點,第三個參數為取字符的個數
$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;//準備返回字串
}
}
return($s);
}
--------如果你是一個新手,那么應該找一本html入門的書來看看。否則是很難成為一個php高手的。這些你開始看起來 非常簡單的處理字符串的函數,經過你的巧妙運用,是能做很多漂亮的事的。下一講,我們就可以看到我們準備了大半天的成果了,呵呵。
三 首頁新聞發布,讓你更新更輕松(中)
上次我們做了一個文件頭(至于文件尾,請大家自己做,假設為tail.php),一個函數的模塊,現在,我們來一個基本功能的實現,也就是動態發布啦
<?php
include("makestr.php";
include("head.php");
$newspath="/announce/"; //以文本文件存放的新聞文件的目錄
$newsfile=array();//準備新聞數組
$hd=dir($newspath); //目錄句柄
while($filename=$hd->read()){ //獲取全部文件
$s=strtolower($filename);
if(strstr($s,".txt")){
//檢測最新的修改日期
$lastchanged=fileatime($newspath.$filename);
$newsfile[$filename]=$lastchanged;
}
}
arsort($newsfile); //文件按時間排序
//輸出文件
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子目錄下,就可以方便發布新聞了。但真正的方便還不在于這,比如說,當新聞過時的時候,程序能自動刪除它,多好。不用ftp,直接在線寫下要新發的公告,多方便。好了,且聽下回分解。
三 首頁新聞發布,讓你更新更輕松(下)
-----上一講里,我們已經實現了首頁新聞發布的基本功能。在這一講里,我們再給它添磚加瓦,使它的功能更為強大。(一個好用的軟件,其實也就是基本功能加上一批附屬功能,這些附屬功能主要也是圖個方便而已,呵呵)
-----首先,我們再明確一下我們想獲得什么方便。我們不希望幾十天以前的東西我們忘了刪除,結果還作為新聞發布在首頁(很丟臉的哦^&^)。如果我們在基本實現中嵌入一段代碼,比如說用filectime($filename),那么在unix下,我們就可以得到從1970年1月1日起以秒計到最后一次文件被改動的時間(在windows下返回的是文件生成的日期時間),而從 1970年1月1日起以秒計到現在的秒數可以用$mynow=mktime()來獲得,減法,判斷,if >我們期望的時間,嘿嘿,sorry,unlink($newspath.$filename)……什么?!您問這段代碼應該放在哪兒?您說呢,呵呵。
或許,你并不是常在一臺機器上上網,當你獲得了一條新的新聞后卻不在你的愛機旁,怎么辦?最理想的莫過于在主頁上上傳文件咯。你或許有一個頁面(admin?)需要用密碼才能進入(假如你還愛惜自己的網站的話,這是有必要的,最好連文件名都不要讓別人知道,呵呵)。下面是一段到處可見的文件上載的代碼:
<?
if(isset($upfile))
{
?>
已上載的文件信息如下:
文件存放路徑 : <?echo $upfile;?>
原始文件名 : <?echo $upfile_name;?>
文件大小(字節): <?echo $upfile_size;?>
文件類型 : <?echo $upfile_type;?>
<?
}
else
{
?>
<html>
<head><title>新聞上傳</title></head><body>
<form enctype="multipart/form-data" method="post" action="<?echo $php_self;?>">
<input type="hidden" name="max_file_size" value="50000">
請選擇或輸入上傳文件名: <input name="upfile" type="file">
<input type="submit" value="上傳" name="submit">
</form>
</body></html>
<?
}
?>
-----這里我們又見到了php和html結合的一種形式,可以借鑒。文件上載雖然方便,但總給人一種不安全感。一旦泄密,你的服務器的系統安全就受到了威脅,因為上載的文件可能是一些破壞性的執行文件(也就是病毒或黑客程序啦)穩妥的做法是寫一個在線編輯的文件,下面是一個示例:
〈?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";
$[email protected]($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">";//注意引用程序內變量的方式。
echo "<input type=text size=20 name=page>";
echo "<input type="submit" name="send" value="選定">";
echo "</form>";
}
?>
-----至此,首頁新聞發布的實現已經可以告一段落了。 我們可以發現,任何一個功能(比較)強大的陳程式都是由一些簡單的功能組合而成的。第三部分功能的整個完善過程使用疊加增強的方法,和軟件工程的自頂向下,逐層分析的開發方法是不一樣的。這是一個適用于學習的方法,自己寫寫習作還是挺管用的,呵呵。
新聞熱點
疑難解答