<form id="hz9zz"></form>
  • <form id="hz9zz"></form>

      <nobr id="hz9zz"></nobr>

      <form id="hz9zz"></form>

    1. 明輝手游網中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

      用文本作數據處理

      [摘要]作者:redfox 郵件:ask4more@163.net 主頁:http://netnote.oso.com.cn 相信大家在網上申請的免費PHP空間,如果是初級用戶,一般都是沒得MySQL可供使用,那么我們解決數據處理的方法之一就是用文本文件了。但是用什么方法才可以最快最方便的處...
      作者:redfox  郵件:ask4more@163.net   
      主頁:http://netnote.oso.com.cn

          相信大家在網上申請的免費PHP空間,如果是初級用戶,一般都是沒得MySQL可供使用,那么我們解決數據處理的方法之一就是用文本文件了。但是用什么方法才可以最快最方便的處理文本數據呢?
          按我的經驗,本人認為,以下列文件結構為最優:
      ----------------------------------------------------------------------
      文件擴展名:.php
      <? die('ACCESS DENIED!');?>
      email=ask4more@13.net & nickname=redfox & realname=阿鼎 & url=http://NetNote.oso.com.cn & ...
      ...
      ----------------------------------------------------------------------
          也許大家都看出來了,以.php做擴展名,并且文件的第一行是<? die('ACCESS DENIED!');?>,這樣就有效的阻止了對數據文件的非法訪問。文件的第二行的格式都是:  變量名1=值1 & 變量名2=值2 & ...
          提出所有的變量很簡單,就是用函數 parse_str();
      例如:
      <?
      $theline="email=ask4more@13.net&nickname=redfox&realname=阿鼎&url=http://NetNote.oso.com.cn";
      parse_str($theline);//分離出變量$email,$nickname,$realname,$url
      echo "I am $nickname,my real name is $realname<br>";
      echo "welcome to visit my website:$url<br>";
      echo "email me at:$email";
      ?>
      運行結果:
      I am redfox,my real name is 阿鼎
      welcome to visit my website:http://NetNote.oso.com.cn
      email me at:ask4more@13.net  

          因此,本文約定,數據文本結構為:
      ----------------------------------------
      <? die('ACCESS DENIED!');?>
      變量名1=值1 & 變量名2=值2 & ...

      文件擴展名: .php
      ----------------------------------------

          真正的數據從第二行開始。好了,用這樣的文件結構就可以很容易的實現GuestBook,BBS,甚至是社區的數據處理了:)我的主頁“網絡便簽” http://netnote.oso.com.cn ,就是這樣實現的。
          為了方便廣大網友,我編了幾個函數,下面將作出必要的解釋。當然你可以隨便的修改和挎貝,但你必須保證功能的完整性。請將下面的代碼存為 textfun.inc (當然取其它的名字也是一樣的),在你要使用的文件的開始部分加入一行語句<?include("textfun.inc");?>,你就可以使用我為你編的函數了。
      下面一共一個db對象,一個函數p2row();

      -------------textfun.inc----------------
      <?
      class db{
        var $dbfile;
        function createdb($dbName){
          $f=$dbName;
          $this->$dbfile=$f;
          $headInfo="<?die('ACCESS DENIED!');?>\n";
          $fp=fopen($f,"w");
          fputs($fp,$headInfo);
          fclose($fp);
          chmod($f,0777);//修改文件的模式,在Unix下也可用
          return(1);
        }
        function opendb($f){
          $this->$dbfile=$f;
          if(file_exists($f)){
            return true;
          }else{
            $this->createdb($f);
          }
        }
        function insertline($info){
          $fields=explode(" ",$info);
          while(list($key,$val)=each($fields)){
            $therow.="$val=\$".$val."&";
            $var1.="\$".$val.",";
          }
          $var1.='$tail';
          eval("global $var1;"); //為了取得環境變量
          eval("\$therow=\"$therow\";");
          $fp=fopen($this->$dbfile,"a");
          fputs($fp,"$therow\n");
          fclose($fp);
        }
        function readall($f){
          if(file_exists($f)){
            $this->$dbfile=$f;
            $rows=file($f);
            for($i=1;$i<count($rows);$i++){
              $temp[]=$rows[$i];
            }
            return $temp;
          }
        }
        //以倒序的方式讀入所有的數據行
        function revread($f){
          if(file_exists($f)){
            $this->$dbfile=$f;
            $rows=file($f);
            $d=count($rows);
            $j=$d-1;
            for($i=0;$i<$d;$i++){
              if($i<$j){
                $temprow=$rows[$i];
                $rows[$i]=$rows[$j];
                $rows[$j]=$temprow;
                $j--;
              }
            }
            for($i=0;$i<count($rows)-1;$i++){  //去掉首行
              $temp[]=$rows[$i];
            }
            return $temp;
          }
        }

        function close(){
        $this=$nothing;
        }
      }

      //把段落文本格式化為一行文本,便于存儲
      function p2row($t){   
        $t=nl2br(stripslashes(htmlspecialchars($t)));
        for($i=0;$i<strlen($t);$i++){
          $c=substr($t,$i,1);
          if(ord($c)==10) $c=" ";
            $tempstr.=$c;
          }
          return $tempstr;
        }
      ?>
      ----------------------------------

          db是我們自定義的本文數據對象,包括六個方法:createdb(),opendb(),insertline(),readall().revread(),close();

      db->createdb(string filename)
      用法例:<?
          include("textfun.inc");
          $mydb=new db;
                 $mydb->createdb("UserInfo.php");     
          ?>
      這個方法創建了一個文件UserInfo.php,首行是<? die('ACCESS DENIED!');?>

      db->opendb(string filename)
      用法例:<?
          include("textfun.inc");
          $mydb=new db;
                 $mydb->opendb("UserInfo.php");
          ?>
      這個方法以追加模式“打開”了數據文件UserInfo.php,如果這個文件不存在,則被創建。
          因此,這個方法可以取代createdb()方法。(但千萬別刪了class db{  }里面的createdb()函數哦:P)

      db->insertline(string VarString)
      用法例:<?
          include("textfun.inc");
          $theline="email=ask4more@13.net&nickname=redfox&realname=阿鼎&url=http://NetNote.oso.com.cn";
          parse_str($theline);//構造環境變量
          $mydb=new db;
                 $mydb->opendb("UserInfo.php");
          $mydb->insertline("nickname realname email url");
          ?>
      db->insertline()可以將形如"nickname realname email url"的字符串,分離出相應的環境變量,并以本文約定的形式存入文件。 傳入insertline()的參數,一定要用“ ”把環境變量名連成字符串,個數不限,但千萬別在前面加"$"哦,嗯,就是要形如"nickname realname email url"這樣的字符串  :~)

      array db->readall(string filename)
      用法例:<?
          include("textfun.inc");
          $mydb=new db;
          $allrec=$mydb->readall("UserInfo.php");
          ?>
      readall()方法返回除首行(<? die('ACCESS DENIED!');?>)外所有數據的數組,每行對應于數組的一個元素。

      array db->revread(string filename)
      用法例:<?
          include("textfun.inc");
          $mydb=new db;
          $allrec=$mydb->revread("UserInfo.php");
          ?>
      revread()方法以倒序方式讀入除首行(<? die('ACCESS DENIED!');?>)外所有數據,返回數組。這對我們在編留言本等時候尤為有用。

      void db->close()
              關閉db對象。

      好了,我們現在就用db對象編一個最簡單的留言本。
      ---------guestbook.php------------
      我的留言本<p>
      <form name=form1 action=<? echo $PHP_SELF;?>>
      NickName:<input type=text name=nickname><br>
      E-Mail:<input type=text name=email><br>
      Homepage:<input type=text name=url value="http://"><br>
      Message:<textarea name=message cols=30 rows=12></textarea><p>
      <input type=submit name=Submit value=提交>
      </form>
      <?
      include("textfun.inc");
      if($Submit){
        $thetime=date("Y-m-d h:m:s A");
        $message=p2row($message);
        $mydb=new db;
        $mydb->opendb("msg.php");
        $mydb->insertline("nickname email url message thetime");
         
        //以下讀出所有的數據
        $allrecs=$mydb->revread("msg.php");
        while(list($key,$theline)=each($allrecs)){
          parse_str($theline);
          ?>
          <a href="mailto:<?echo $email;?>"><?echo $nickname;?></a><?echo $thetime;?><br>
          URL:<a href="<?echo $url;?>"><?echo $url;?></a><br>
          Message:<br><?echo stripslashes($message);?><hr noshade size=1>
          <?
        }
        $mydb->close();
      }
      ?>
      -----------------------------
      好了,雖然這個留言本不是很美觀,但主要是為了舉例說明db對象的用法~:)
      本文在WIN98+PWS+PHP4下調試通過!



      日韩精品一区二区三区高清