用動態網頁技術PHP打造個人網站全攻略

來源:互聯網
上載者:User

  這裡和大家交流一下用動態網頁技術PHP來架設個人網站的經驗。不妥之處,敬請指正!

  一 編輯調試環境

  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 "網頁教學網"//如果標題常變,可做一個函數。
  echo "</title></head>"
  ?>
  這是一個寫html頭的一功能塊。
  <?php
  /*makestr.php 定義一個公用處理文本中超連結的函數,假定文本中連結形式為${http://www.webjx.com|網頁教學網}*/
  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";
  $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">";//注意引用程式內變數的方式。
  echo "<input type=text size=20 name=page>";
  echo "<input type="submit" name="send" value="選定">";
  echo "</form>";
  }
  ?>

  -----至此,首頁新聞發布的實現已經可以告一段落了。 我們可以發現,任何一個功能(比較)強大的陳程式都是由一些簡單的功能組合而成的。第三部分功能的整個完善過程使用疊加增強方法,和軟體工程的自頂向下,逐層分析的開發方法是不一樣的。這是一個適用於學習的方法,自己寫寫習作還是挺管用的,呵呵。



相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。