2011 本站教學範例已全面更新~ 新教學請看 http://www.flycan.com/article/   【到新的教學討論區】
【飛肯設計學苑】- 回首頁 -
回首頁最新開課訊息企業包班教育訓練範例教學區問題討論區交流分享區程式下載區
Photoshop影像達人專修班 Photoshop 遮色片 & 色版創作進階班 CSS 版面設計專修班 ActionScript 3.0 程式設計入門班 ActionScript & XML 進階整合應用班 Dreamweaver & CSS網頁版型設計班

 

本站已全面更新~ 2011年 新教學範例請看 → http://www.flycan.com/article/

 

【DW PHP 資料庫】問題討論區
php利用文本当数据库

發表新主題   回覆主題
【飛肯】教學網站 首頁 » 【DW PHP 資料庫】問題討論區
上一篇主題 :: 下一篇主題  
發表人 內容
redmoon_j
【三年級】
【三年級】


註冊時間: 2006-01-16
文章: 32

發表php利用文本当数据库 引言回覆

發表於: 2006-01-18 13:50 
:o 网上有一些免费的php空间,但是这些空间都不支持mysql [免费用户没有mysql数据库,如果你的免费空间提供mysql,那你是捡到宝了],php初学者又想建一个自己的网站,那我可以告诉你利用文本一样可以建网站。

这个文本可以是*.dat,*.txt,*.php......当然用那个根据你的兴趣选择吧!

那怎么在*.txt中添加数据呢?下面我们来说说文本数据库的格式

例如:

<?

//添加一条记录:

$id = 1 ;

$name = "军军";

$title = "文本数据库";

$time = date("Y-m-d H:i:s");

$str = $id."|".$name."|".$title."|".$time."\n";//利用"|"进行分割,当然这些"###","@@@","%%%","|||"等等分隔符也是可以的,自己起吧!

$fp = fopen("txt.txt","w");

fwrite($fp,$str);

fclose($fp);

?>

如果添加成功,你打开你的文本数据库,就会发现多了一行。

1|军军|文本数据库|2006-01-18 13:25:49

$id=1,这个1 就是索引,当然有些人是利用time()充当索引

我喜欢用阿拉伯数字当索引。根据个人兴趣罢了。

2。那怎么读取数据库呢?

<?php

//-------------------------

$txt = "txt.txt";

$fp = fopen($txt,"r");

$str = fread($fp,filesize($txt));

$row = explode("|",$str);

list ($id,$name,$title,$time)=$row;

echo $id;

echo $name;

echo $time ;

//-------------------------------

//显示就是这样:1军军2006-01-18 13:25:49

//当然这只是一条记录,2条以上怎么读取呢?

//-----------------------------

$txt = "txt.txt";

$str = file($txt);//一次读入一个数组中

$num = count($str);

//echo $num;

for($i=0;$i<$num;$i++){

$row = explode("|",$str[$i]);

list ($id,$name,$title,$time)=$row;

echo $id;

echo $name;

echo $time ;

//-----------------------

?>

测试一下:什么1个记录?哈哈,你的在txt.txt中手动添加几个数据内容呀。

这样你的txt.txt中的数据库表现是:

1|name1|title1|time1

2|name2|title2|time2

3|name3|title3|time3

......

每笔数据是一行,如果你用记事本打开txt.txt你会发现一个小黑格它就是"\n"换行符。

好了,YOGO先说这下吧,慢慢来,可能这些大家都知道,呵呵 :lol:



一天到晚想做梦的墨斗鱼
回頂端
檢視會員個人資料 發送私人訊息 參觀發表人的個人網站
YOGO
【班長】
【班長】


註冊時間: 2005-12-09
文章: 103

發表Re: php利用文本当数据库 引言回覆

發表於: 2006-01-18 15:19 
redmoon_j 寫到:
:o 网上有一些免费的php空间,但是这些空间都不支持mysql [免费用户没有mysql数据库,如果你的免费空间提供mysql,那你是捡到宝了],php初学者又想建一个自己的网站,那我可以告诉你利用文本一样可以建网站。

这个文本可以是*.dat,*.txt,*.php......当然用那个根据你的兴趣选择吧!

那怎么在*.txt中添加数据呢?下面我们来说说文本数据库的格式

例如:

<?

//添加一条记录:

$id = 1 ;

$name = "军军";

$title = "文本数据库";

$time = date("Y-m-d H:i:s");

$str = $id."|".$name."|".$title."|".$time."\n";//利用"|"进行分割,当然这些"###","@@@","%%%","|||"等等分隔符也是可以的,自己起吧!

$fp = fopen("txt.txt","w");

fwrite($fp,$str);

fclose($fp);

?>

如果添加成功,你打开你的文本数据库,就会发现多了一行。

1|军军|文本数据库|2006-01-18 13:25:49

$id=1,这个1 就是索引,当然有些人是利用time()充当索引

我喜欢用阿拉伯数字当索引。根据个人兴趣罢了。

2。那怎么读取数据库呢?

<?php

//-------------------------

$txt = "txt.txt";

$fp = fopen($txt,"r");

$str = fread($fp,filesize($txt));

$row = explode("|",$str);

list ($id,$name,$title,$time)=$row;

echo $id;

echo $name;

echo $time ;

//-------------------------------

//显示就是这样:1军军2006-01-18 13:25:49

//当然这只是一条记录,2条以上怎么读取呢?

//-----------------------------

$txt = "txt.txt";

$str = file($txt);//一次读入一个数组中

$num = count($str);

//echo $num;

for($i=0;$i<$num;$i++){

$row = explode("|",$str[$i]);

list ($id,$name,$title,$time)=$row;

echo $id;

echo $name;

echo $time ;

//-----------------------

?>

测试一下:什么1个记录?哈哈,你的在txt.txt中手动添加几个数据内容呀。

这样你的txt.txt中的数据库表现是:

1|name1|title1|time1

2|name2|title2|time2

3|name3|title3|time3

......

每笔数据是一行,如果你用记事本打开txt.txt你会发现一个小黑格它就是"\n"换行符。

好了,YOGO先说这下吧,慢慢来,可能这些大家都知道,呵呵 :lol:

謝謝軍軍你的詳細講解,你說的這方法我知道,不過我要說明一下,txt檔本身並無索引、排序、搜尋等功能,這是無庸至疑的,那你一定會覺得很奇怪那為什麼你的方法可以用?我來說明一下吧!!

★:

<?

//添加一条记录:

$id = 1 ;

$name = "军军";

$title = "文本数据库";

$time = date("Y-m-d H:i:s");

$str = $id."|".$name."|".$title."|".$time."\n";//利用"|"进行分割,当然这些"###","@@@","%%%","|||"等等分隔符也是可以的,自己起吧!

$fp = fopen("txt.txt","w");

fwrite($fp,$str);

fclose($fp);

?>

上面這一段的程式碼是把資料寫入txt.txt檔中,這一段沒什麼特別的地方,我就不另外解說了

★:

<?php

//-------------------------

$txt = "txt.txt";

$fp = fopen($txt,"r");

$str = fread($fp,filesize($txt));

$row = explode("|",$str);

list ($id,$name,$title,$time)=$row;

echo $id;

echo $name;

echo $time ;

//-------------------------------

//显示就是这样:1军军2006-01-18 13:25:49

//当然这只是一条记录,2条以上怎么读取呢?

//-----------------------------

$txt = "txt.txt";

$str = file($txt);//一次读入一个数组中

$num = count($str);

//echo $num;

for($i=0;$i<$num;$i++){

$row = explode("|",$str[$i]);

list ($id,$name,$title,$time)=$row;

echo $id;

echo $name;

echo $time ;

//-----------------------

?>

我來解說一下這一段

$txt = "txt.txt"; ---> 這一句應該不用解釋吧!!

$str = file($txt); ---> 這一句是說將$txt的內容讀到陣列中

$num = count($str); ---> 這一句是說統計所有的陣列數

for($i=0;$i<$num;$i++) ---> 這一句是說用for迴圈來處理每一筆陣列

$row = explode("|",$str[$i]); ---> 這一句是說用explode()函式來分割以"|"為分割點的列列資料

list ($id,$name,$title,$time)=$row; ---> 這一句是說把剛剛分割出來的陣列值指派給$id,$name,$title,$time這四個變數

echo $id;

echo $name;

echo $time ;

這三句我應該是不用解說了吧

基本上軍軍這個程式並不是對txt.txt檔案來作索引、排序、搜尋等功能,因為txt檔本身並無索引、排序、搜尋等功能,這是無庸至疑的,那你一定會覺得很奇怪那為什麼你的方法可以用?那是因為程式已經將檔案內容讀到一個大陣列中,而中間又把大陣列分割成小陣列,然後輸出小陣列的內容,基本上當程式把檔案內容讀到程式的陣列後,之後的作為都跟txt.txt檔無關了,這種方法有一個缺點,就是當txt.txt檔越大時,速度越慢,效能越差,因為php在執行時,php的變數其實是暫時記憶在記憶體中,所以當txt.txt檔越大時,所站的記憶體越大,所以速度越慢,效能越差

參考一下吧

fputs() 可以把寫入的資料放在最前面嗎?or 可以對讀入的*.txt 做排序?

另外php2h.com這個網站有免費的php + mysql空間還不錯

http://yogo.php2h.com



輕鬆聽音樂.樂活新品味;關於音樂的大小事,就讓立峰國際音樂告訴你,歡迎你的立刻加入
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件 參觀發表人的個人網站 MSN Messenger
redmoon_j
【三年級】
【三年級】


註冊時間: 2006-01-16
文章: 32

發表Re: php利用文本当数据库 引言回覆

發表於: 2006-01-18 16:27 
YOGO 寫到:

基本上軍軍這個程式並不是對txt.txt檔案來作索引、排序、搜尋等功能,因為txt檔本身並無索引、排序、搜尋等功能,這是無庸至疑的,那你一定會覺得很奇怪那為什麼你的方法可以用?那是因為程式已經將檔案內容讀到一個大陣列中,而中間又把大陣列分割成小陣列,然後輸出小陣列的內容,基本上當程式把檔案內容讀到程式的陣列後,之後的作為都跟txt.txt檔無關了,這種方法有一個缺點,就是當txt.txt檔越大時,速度越慢,效能越差,因為php在執行時,php的變數其實是暫時記憶在記憶體中,所以當txt.txt檔越大時,所站的記憶體越大,所以速度越慢,效能越差

參考一下吧

fputs() 可以把寫入的資料放在最前面嗎?or 可以對讀入的*.txt 做排序?

另外php2h.com這個網站有免費的php + mysql空間還不錯

http://yogo.php2h.com

请问yago这行英语是什么意思是不是申请空间成功,相关信息在我的邮箱中,我的英文很差,所以呵呵,看不懂只能猜,

我在http://www.php2h.com申请空间,利用ftp可以连接上,但是不知道如何察看mysql。请明示!谢了

Your account has been created. You will recieve a confirmation email shortly. Once you have recieved this email, you will be able to login to your account and create your website



一天到晚想做梦的墨斗鱼
回頂端
檢視會員個人資料 發送私人訊息 參觀發表人的個人網站
redmoon_j
【三年級】
【三年級】


註冊時間: 2006-01-16
文章: 32

發表Re: php利用文本当数据库 引言回覆

發表於: 2006-01-18 16:41 
YOGO 寫到:

基本上軍軍這個程式並不是對txt.txt檔案來作索引、排序、搜尋等功能,因為txt檔本身並無索引、排序、搜尋等功能,這是無庸至疑的,那你一定會覺得很奇怪那為什麼你的方法可以用?那是因為程式已經將檔案內容讀到一個大陣列中,而中間又把大陣列分割成小陣列,然後輸出小陣列的內容,基本上當程式把檔案內容讀到程式的陣列後,之後的作為都跟txt.txt檔無關了,這種方法有一個缺點,就是當txt.txt檔越大時,速度越慢,效能越差,因為php在執行時,php的變數其實是暫時記憶在記憶體中,所以當txt.txt檔越大時,所站的記憶體越大,所以速度越慢,效能越差

參考一下吧

fputs() 可以把寫入的資料放在最前面嗎?or 可以對讀入的*.txt 做排序?

1、首先php可以将资料写入到*.txt得最前面。利用自定义的函数。

//----为什么要写在最前面呢?php4可以将数组倒序,显示资料时候可以将最后添加的内容,第一个显示出来。

2、其次php也可以将*.txt中的内容进行排序,我知道可以我不会,呵呵

3、如果你不用mysql,请问你利用什么储存数据。[意思就是:假如你没有mysql数据库,请问你会利用php如何编写一个留言本或者新闻发布系统或小论坛]

请指示,谢谢。



一天到晚想做梦的墨斗鱼
回頂端
檢視會員個人資料 發送私人訊息 參觀發表人的個人網站
YOGO
【班長】
【班長】


註冊時間: 2005-12-09
文章: 103

發表Re: php利用文本当数据库 引言回覆

發表於: 2006-01-18 18:30 
redmoon_j 寫到:
YOGO 寫到:

基本上軍軍這個程式並不是對txt.txt檔案來作索引、排序、搜尋等功能,因為txt檔本身並無索引、排序、搜尋等功能,這是無庸至疑的,那你一定會覺得很奇怪那為什麼你的方法可以用?那是因為程式已經將檔案內容讀到一個大陣列中,而中間又把大陣列分割成小陣列,然後輸出小陣列的內容,基本上當程式把檔案內容讀到程式的陣列後,之後的作為都跟txt.txt檔無關了,這種方法有一個缺點,就是當txt.txt檔越大時,速度越慢,效能越差,因為php在執行時,php的變數其實是暫時記憶在記憶體中,所以當txt.txt檔越大時,所站的記憶體越大,所以速度越慢,效能越差

參考一下吧

fputs() 可以把寫入的資料放在最前面嗎?or 可以對讀入的*.txt 做排序?

1、首先php可以将资料写入到*.txt得最前面。利用自定义的函数。

//----为什么要写在最前面呢?php4可以将数组倒序,显示资料时候可以将最后添加的内容,第一个显示出来。

2、其次php也可以将*.txt中的内容进行排序,我知道可以我不会,呵呵

3、如果你不用mysql,请问你利用什么储存数据。[意思就是:假如你没有mysql数据库,请问你会利用php如何编写一个留言本或者新闻发布系统或小论坛]

请指示,谢谢。

Your account has been created. You will recieve a confirmation email shortly. Once you have recieved this email, you will be able to login to your account and create your website

這一段的意思是說你的帳號已經被建立了,前去你的MAIL收信,裡面有你的web主機及mysql主機的帳號和密碼

如果他的phpmyadmin不能用的話,就是掛了,php2h最近常在掛,但有很快就修覆了,你晚點再試試,若不行就明天再試吧,我上次是等三天

再來回答你的問題

1、首先php可以将资料写入到*.txt得最前面。利用自定义的函数。

它所使用的全是php的內建函式,並沒有所謂的自定函式,至於php可以将资料写入到*.txt得最前面這一段就更奇怪了,參考一下吧!

r --> 開啟檔案為唯讀狀態,新資料無法寫入

r+ --> 開啟檔案為可讀取及可寫入狀態,新資料會被加在檔案的最頂端

w --> 開啟檔案為可寫入狀態,原有的資料會被取代,如果檔案不存在會自動建立檔案

w+ --> 開啟檔案為可讀取及可寫入狀態,原有的資料會被取代,如果檔案不存在會自動建立

a --> 開啟檔案為附加模式,新資料會加在舊資料的尾端,如果檔案不存在會自動建立檔案

a+ --> 開啟檔案為附加模及讀取式,新資料會加在舊資料的尾端,如果檔案不存在會自動建立檔案

而且我覺得這支程式怪怪的,應該這樣才對吧!!

★:

<?

//添加一条记录:

$id = 1 ;

$name = "军军";

$title = "文本数据库";

$time = date("Y-m-d H:i:s");

$str = $id."|".$name."|".$title."|".$time."\n";//利用"|"进行分割,当然这些"###","@@@","%%%","|||"等等分隔符也是可以的,自己起吧!

if(!is_file("txt.txt")) //檢查txt.txt是否存在

{  //如果txt.txt不存在,則建立txt.txt檔

    $fp = fopen("txt.txt","w");  //開啟檔案為可寫入狀態,原有的資料會被取代,如果檔案不存在會自動建立檔案

    fwrite($fp,$str); //將資料寫入

    fclose($fp); //關閉檔案

}

else

{  //如果txt.txt存在,則將檔案以可讀取及可寫入狀態開啟,並將新資料加在檔案的最頂端

    $fp = fopen("txt.txt","r+");

    fwrite($fp,$str);

    fclose($fp);

}

?>

因為它用

★:

$fp = fopen("txt.txt","w"); //開啟檔案為可寫入狀態,原有的資料會被取代,如果檔案不存在會自動建立檔案,那之前的舊檔案不在被清掉了

2、其次php也可以将*.txt中的内容进行排序,我知道可以我不会,呵呵

你要問的大概是這個吧,我猜的,因為我看不太懂你的意思

asort --- 將陣列排列且維持索引值的關係

3、如果你不用mysql,请问你利用什么储存数据。[意思就是:假如你没有mysql数据库,请问你会利用php如何编写一个留言本或者新闻发布系统或小论坛]

我沒說用你的方法不好,在沒有資料庫的支援下,確實只有你這種方法,只是我也必需說出他的缺點及網路空間需支援檔案寫入權限才行



輕鬆聽音樂.樂活新品味;關於音樂的大小事,就讓立峰國際音樂告訴你,歡迎你的立刻加入


YOGO 在 2006-01-18 19:08 作了第 2 次修改
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件 參觀發表人的個人網站 MSN Messenger
YOGO
【班長】
【班長】


註冊時間: 2005-12-09
文章: 103

發表 引言回覆

發表於: 2006-01-18 19:04 
剛剛心血來潮,測了一下

★:

<?

//添加一条记录:

$id = 1 ;

$name = "军军";

$title = "文本数据库";

$time = date("Y-m-d H:i:s");

$str = $id."|".$name."|".$title."|".$time."\n";//利用"|"进行分割,当然这些"###","@@@","%%%","|||"等等分隔符也是可以的,自己起吧!

$fp = fopen("txt.txt","w");

fwrite($fp,$str);

fclose($fp);

?>

這段程式碼是錯的,就如我之前說的,他在寫入新資料時會同時清掉舊資料,造成資料永遠只有一筆而已



輕鬆聽音樂.樂活新品味;關於音樂的大小事,就讓立峰國際音樂告訴你,歡迎你的立刻加入
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件 參觀發表人的個人網站 MSN Messenger
redmoon_j
【三年級】
【三年級】


註冊時間: 2006-01-16
文章: 32

發表哈哈,错了 引言回覆

發表於: 2006-01-19 09:37 
YOGO 寫到:
剛剛心血來潮,測了一下

★:

<?

//添加一条记录:

$id = 1 ;

$name = "军军";

$title = "文本数据库";

$time = date("Y-m-d H:i:s");

$str = $id."|".$name."|".$title."|".$time."\n";//利用"|"进行分割,当然这些"###","@@@","%%%","|||"等等分隔符也是可以的,自己起吧!

$fp = fopen("txt.txt","w");

fwrite($fp,$str);

fclose($fp);

?>

這段程式碼是錯的,就如我之前說的,他在寫入新資料時會同時清掉舊資料,造成資料永遠只有一筆而已

$fp = fopen("txt.txt","w");

这行代码是覆盖写入,所以文档中只有一笔;

当然如果要添加多行的话应改为:

$fp = fopen("txt.txt","a+");

哈哈,不好意思。

---------------------------------------------------------

谢谢YOGO指教。

------------------------------



一天到晚想做梦的墨斗鱼
回頂端
檢視會員個人資料 發送私人訊息 參觀發表人的個人網站
YOGO
【班長】
【班長】


註冊時間: 2005-12-09
文章: 103

發表Re: 哈哈,错了 引言回覆

發表於: 2006-01-19 09:52 
redmoon_j 寫到:
YOGO 寫到:
剛剛心血來潮,測了一下

★:

<?

//添加一条记录:

$id = 1 ;

$name = "军军";

$title = "文本数据库";

$time = date("Y-m-d H:i:s");

$str = $id."|".$name."|".$title."|".$time."\n";//利用"|"进行分割,当然这些"###","@@@","%%%","|||"等等分隔符也是可以的,自己起吧!

$fp = fopen("txt.txt","w");

fwrite($fp,$str);

fclose($fp);

?>

這段程式碼是錯的,就如我之前說的,他在寫入新資料時會同時清掉舊資料,造成資料永遠只有一筆而已

$fp = fopen("txt.txt","w");

这行代码是覆盖写入,所以文档中只有一笔;

当然如果要添加多行的话应改为:

$fp = fopen("txt.txt","a+");

哈哈,不好意思。

---------------------------------------------------------

谢谢YOGO指教。

------------------------------

不對,若照你之前所說的

引言回覆:

php可以将资料写入到*.txt得最前面

不能用a+,因為a+是新資料會加在舊資料的尾端,而不是前端,而是檔案若不存在需先始用w來建立檔案,當檔案存在後,再改用r+來寫入資料,這樣新的資料才會在檔案的最頂端



輕鬆聽音樂.樂活新品味;關於音樂的大小事,就讓立峰國際音樂告訴你,歡迎你的立刻加入
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件 參觀發表人的個人網站 MSN Messenger
redmoon_j
【三年級】
【三年級】


註冊時間: 2006-01-16
文章: 32

發表哈哈 引言回覆

發表於: 2006-01-19 11:47 
操作文件是在PHP程序经常要做的事,在这简单的介绍一些操作文件的方法,包括文件的储存,读出,插入新记录,删除其中一条记录等:

操作文件经常要用到的函数

fopen()//打开一个文件

fclose()//关闭一个文件

copy()//复制一个文件

feof()//判断文件指针是否到了最后

file_exists()//判断文件是否存在

file()//把整个文件读入一个数组 * 很有用

flock()//琐定文件

fread()//读取整个文件

fwrite()//写入文件,也可用来新建文件

unlink()//删除文件

其中我个人觉得fwrite和file是最有用的

fopen()有很多参数需要注意,可以查手册找到

mode 说明

'r' 只读方式打开,将文件指针指向文件头。

'r+' 读写方式打开,将文件指针指向文件头。

'w' 写入方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。

'w+' 读写方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。

'a' 写入方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。

'a+' 读写方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。

'x' 创建并以写入方式打开,将文件指针指向文件头。如果文件已存在,则 fopen() 调用失败并返回 FALSE,并生成 一条 E_WARNING 级别的错误信息。如果文件不存在则尝试创建之。这和给 底层的 open(2) 系统调用指定 O_EXCL|O_CREAT 标记是等价的。此选项被 PHP 4.3.2 以及以后的版本所支持,仅能用于本地文件。

'x+' 创建并以读写方式打开,将文件指针指向文件头。如果文件已存在,则 fopen() 调用失败并返回 FALSE,并生成一条 E_WARNING 级别的错误信息。如果文件不存在则尝试创建之。这和给 底层的 open(2) 系统调用指定 O_EXCL|O_CREAT 标记是等价的。此选项被 PHP 4.3.2 以及以后的版本所支持,仅能用于本地文件。

fwrite()是写入文件,在这给个比较好用的函数,是fwrite的增强版,呵呵

function writetofile($file_name,$data,$method="w") {

$filenum=fopen($file_name,$method);

flock($filenum,LOCK_EX);

$file_data=fwrite($filenum,$data);

fclose($filenum);

return $file_data;

}

用法很容易吧,应该能看懂,和fwrite一样的用法,但其中包含了fopen,flock,fclose,很实用

file()是把整个文件读入一个数组

比如把一个文件当成数据库来使用,一般都要用到这个函数

它能一行一行的读取文本,这样我们就可以把每条记录存成一行,然后读取,后面给出的例子可以看见它的使用方法

操作文件当然少不了对字符串的操作

其中一般会用到

explode()和implode()两个函数

第一个是用来根据关键字分割字符串的,第二个刚好相反,是用关键字把字符串连成一个整体的

★:
<?php

function writetofile($file_name,$data,$method="w") {

        $filenum=fopen($file_name,$method);

        flock($filenum,LOCK_EX);

        $file_data=fwrite($filenum,$data);

        fclose($filenum);

        return $file_data;

}

function readfromfile($file_name) {

        menu_idif (file_exists($file_name)) {

        menu_idmenu_id$file_data=file_get_contents($file_name);

        menu_idmenu_idreturn $file_data;

        menu_id}

}

$filename="phzzy.txt";

//下面数据后的\n为换行符,为了用file函数做准备,字符|为分割符,为explode函数做准备

$filedata_1="phzzy|http://www.flashforweb.com|copyright2005!\n";

$filedata_2="a-fei|http://www.flashforweb.com/a-fei|copyright 2004-2005\n";

$filedata_3="xxxx|http://www.somesite.com|no copyright!\n";

$filedata_4="yyyy|http://www.nosite.com|No copyright!\n";

writetofile($filename,$filedata_1);//把$filedata_1写入$filename中,如果$filename不存在它会自动生成这个文件,如果存在则将文件里的内容全部删除然后在写入$filedata_1

//此时phzzy.txt文件中会出现,并且里面的数据为$filedata_1

$content_1=readfromfile($filename);

echo $content_1;

echo "<hr>";

//下面是向文件末尾插入一行记录

$temp=readfromfile($filename);//先读取全部记录

writetofile($filename,$filedata_2 . $temp);//写入记录

$content_2=readfromfile($filename);

echo $content_2;

echo "<hr>";

//下面是向文件最开始插入一条记录

$temp=readfromfile($filename);//先读取全部记录

writetofile($filename,$temp . $filedata_3);//写入记录

$content_3=readfromfile($filename);

echo $content_3;

echo "<hr>";

//下面是向文件第三行插入一条记录

$all=file($filename);

$allcount=count($all);

for($i=0;$i<$allcount;$i++){

        menu_id$wdata.=$all[$i];

        menu_idif($i==1) $wdata.=$filedata_4;

}

writetofile($filename,$wdata);

$content_4=readfromfile($filename);

echo $content_4;

echo "<hr>";

//最后介绍explode和implode的用法

//先用explode按格式循环输出所有数据,现在文本中总共有4条数据

$all=file($filename);

$allcount=count($all);

for($i=0;$i<$allcount;$i++){

        menu_id$show_array=@explode("|", $all[$i]);//用|做为分割符号,然后分别用数组$show_array储存,每次分割的是第$i行的数据

        menu_idecho "Name: ".$show_array[0]."<br>";

        menu_idecho "Website: "."<a href=".$show_array[1].">".$show_array[1]."</a><br>";

        menu_idecho "Copyright: ".$show_array[2]."<br><br><br>";

}

//implode和explode的用法刚好相反,一般是接收到用户传过来的分散的值把它组合成一个整体的值,然后在文本中存成一行,具体大家自己弄弄拉,可以看implode那个小例子

?>

一些比较基本的文件储存方法:

1..如果想用文本象数据库一样储存数据..为了以后的方便...一般是把每条数据储存为一行..以后用file函数把他分开..然后每行应该都有分割符...比如 | ..用来分割各个字段..把用file函数分开后的数据再用explode根据分割符进行分割...使他可以应用到程序中...就好象直接从数据库中取出某条记录的某字段一样...

2..看BO-BLOG学到的一点经验.....因为文件大了以后很难操作嘛..所以要尽量减上文件的大小...比如做新闻管理或BLOG的时候...每篇文章都应该单独生成一个文件储存....但如果是注册用户的信息呢??因为注册用户可能很多..我们不可能分开储存..那得多少个文件啊....这样我们可以先取得注册用户名的首字母..比如phzzy就是p...汉字用户名就是han_..这样分组储存在不同的文件中..在用户登陆判断密码时也不用一次打开一个庞大的文件..而是可以先取得首字母分析要打开那个文件然后在取得用户信息

3..要操作文件中的某一行..比如修改或删除什么的..一般是用file分割整个文件...听说也有人用指针做的..不过好象特别麻烦..那样好象必须确定文本中每行甚至每个"字段"(就是用|分割开来的东西)的字符数...比较麻烦...建议还是一次打开整个文件吧....打开整个文件并file后..生成一个数组..然后用循环找到要修改或删除的那一行并进行相关操作...然后在用implode合并数组并储存进文件中



一天到晚想做梦的墨斗鱼
回頂端
檢視會員個人資料 發送私人訊息 參觀發表人的個人網站
YOGO
【班長】
【班長】


註冊時間: 2005-12-09
文章: 103

發表 引言回覆

發表於: 2006-01-20 13:41 
幫你翻成正體中文,好方便其他朋友閱讀,也謝謝你提供寶貴的資訊

操作文件是在PHP程序經常要做的事,在這簡單的介紹一些操作文件的方法,包括文件的儲存,讀出,插入新記錄,刪除其中一條記錄等:

操作文件經常要用到的函數

fopen()//打開一個文件

fclose()//關閉一個文件

copy()//複製一個文件

feof()//判斷文件指針是否到了最後

file_exists()//判斷文件是否存在

file()//把整個文件讀入一個數組 * 很有用

flock()//瑣定文件

fread()//讀取整個文件

fwrite()//寫入文件,也可用來新建文件

unlink()//刪除文件

其中我個人覺得fwrite和file是最有用的

fopen()有很多參數需要注意,可以查手冊找到

mode 說明

'r' 只讀方式打開,將文件指針指向文件頭。

'r+' 讀寫方式打開,將文件指針指向文件頭。

'w' 寫入方式打開,將文件指針指向文件頭並將文件大小截為零。如果文件不存在則嘗試創建之。

'w+' 讀寫方式打開,將文件指針指向文件頭並將文件大小截為零。如果文件不存在則嘗試創建之。

'a' 寫入方式打開,將文件指針指向文件末尾。如果文件不存在則嘗試創建之。

'a+' 讀寫方式打開,將文件指針指向文件末尾。如果文件不存在則嘗試創建之。

'x' 創建並以寫入方式打開,將文件指針指向文件頭。如果文件已存在,則 fopen() 調用失敗並返回 FALSE,並生成 一條 E_WARNING 級別的錯誤信息。如果文件不存在則嘗試創建之。這和給 底層的 open(2) 系統調用指定 O_EXCL|O_CREAT 標記是等價的。此選項被 PHP 4.3.2 以及以後的版本所支持,僅能用於本地文件。

'x+' 創建並以讀寫方式打開,將文件指針指向文件頭。如果文件已存在,則 fopen() 調用失敗並返回 FALSE,並生成一條 E_WARNING 級別的錯誤信息。如果文件不存在則嘗試創建之。這和給 底層的 open(2) 系統調用指定 O_EXCL|O_CREAT 標記是等價的。此選項被 PHP 4.3.2 以及以後的版本所支持,僅能用於本地文件。

fwrite()是寫入文件,在這給個比較好用的函數,是fwrite的增強版,呵呵

function writetofile($file_name,$data,$method="w") {

$filenum=fopen($file_name,$method);

flock($filenum,LOCK_EX);

$file_data=fwrite($filenum,$data);

fclose($filenum);

return $file_data;

}

用法很容易吧,應該能看懂,和fwrite一樣的用法,但其中包含了fopen,flock,fclose,很實用

file()是把整個文件讀入一個數組

比如把一個文件當成數據庫來使用,一般都要用到這個函數

它能一行一行的讀取文本,這樣我們就可以把每條記錄存成一行,然後讀取,後面給出的例子可以看見它的使用方法

操作文件當然少不了對字符串的操作

其中一般會用到

explode()和implode()兩個函數

第一個是用來根據關鍵字分割字符串的,第二個剛好相反,是用關鍵字把字符串連成一個整體的

★:

<?php

function writetofile($file_name,$data,$method="w") {

        $filenum=fopen($file_name,$method);

        flock($filenum,LOCK_EX);

        $file_data=fwrite($filenum,$data);

        fclose($filenum);

        return $file_data;

}

function readfromfile($file_name) {

        menu_idif (file_exists($file_name)) {

        menu_idmenu_id$file_data=file_get_contents($file_name);

        menu_idmenu_idreturn $file_data;

        menu_id}

}

$filename="phzzy.txt";

//下面數據後的\n為換行符,為了用file函數做準備,字符|為分割符,為explode函數做準備

$filedata_1="phzzy|http://www.flashforweb.com|copyright2005!\n";

$filedata_2="a-fei|http://www.flashforweb.com/a-fei|copyright 2004-2005\n";

$filedata_3="xxxx|http://www.somesite.com|no copyright!\n";

$filedata_4="yyyy|http://www.nosite.com|No copyright!\n";

writetofile($filename,$filedata_1);//把$filedata_1寫入$filename中,如果$filename不存在它會自動生成這個文件,如果存在則將文件裡的內容全部刪除然後在寫入$filedata_1

//此時phzzy.txt文件中會出現,並且裡面的數據為$filedata_1

$content_1=readfromfile($filename);

echo $content_1;

echo "<hr>";

//下面是向文件末尾插入一行記錄

$temp=readfromfile($filename);//先讀取全部記錄

writetofile($filename,$filedata_2 . $temp);//寫入記錄

$content_2=readfromfile($filename);

echo $content_2;

echo "<hr>";

//下面是向文件最開始插入一條記錄

$temp=readfromfile($filename);//先讀取全部記錄

writetofile($filename,$temp . $filedata_3);//寫入記錄

$content_3=readfromfile($filename);

echo $content_3;

echo "<hr>";

//下面是向文件第三行插入一條記錄

$all=file($filename);

$allcount=count($all);

for($i=0;$i<$allcount;$i++){

        menu_id$wdata.=$all[$i];

        menu_idif($i==1) $wdata.=$filedata_4;

}

writetofile($filename,$wdata);

$content_4=readfromfile($filename);

echo $content_4;

echo "<hr>";

//最後介紹explode和implode的用法

//先用explode按格式循環輸出所有數據,現在文本中總共有4條數據

$all=file($filename);

$allcount=count($all);

for($i=0;$i<$allcount;$i++){

        menu_id$show_array=@explode("|", $all[$i]);//用|做為分割符號,然後分別用數組$show_array儲存,每次分割的是第$i行的數據

        menu_idecho "Name: ".$show_array[0]."<br>";

        menu_idecho "Website: "."<a href=".$show_array[1].">".$show_array[1]."</a><br>";

        menu_idecho "Copyright: ".$show_array[2]."<br><br><br>";

}

//implode和explode的用法剛好相反,一般是接收到用戶傳過來的分散的值把它組合成一個整體的值,然後在文本中存成一行,具體大家自己弄弄拉,可以看implode那個小例子

?>

一些比較基本的文件儲存方法:

1..如果想用文本象數據庫一樣儲存數據..為了以後的方便...一般是把每條數據儲存為一行..以後用file函數把他分開..然後每行應該都有分割符...比如 | ..用來分割各個字段..把用file函數分開後的數據再用explode根據分割符進行分割...使他可以應用到程序中...就好像直接從數據庫中取出某條記錄的某字段一樣...

2..看BO-BLOG學到的一點經驗.....因為文件大了以後很難操作嘛..所以要儘量減上文件的大小...比如做新聞管理或BLOG的時候...每篇文章都應該單獨生成一個文件儲存....但如果是註冊用戶的信息呢??因為註冊用戶可能很多..我們不可能分開儲存..那得多少個文件啊....這樣我們可以先取得註冊用戶名的首字母..比如phzzy就是p...漢字用戶名就是han_..這樣分組儲存在不同的文件中..在用戶登陸判斷密碼時也不用一次打開一個龐大的文件..而是可以先取得首字母分析要打開那個文件然後在取得用戶信息

3..要操作文件中的某一行..比如修改或刪除什麼的..一般是用file分割整個文件...聽說也有人用指針做的..不過好像特別麻煩..那樣好像必須確定文本中每行甚至每個"字段"(就是用|分割開來的東西)的字符數...比較麻煩...建議還是一次打開整個文件吧....打開整個文件並 file後..生成一個數組..然後用循環找到要修改或刪除的那一行並進行相關操作...然後在用implode合併數組並儲存進文件中



輕鬆聽音樂.樂活新品味;關於音樂的大小事,就讓立峰國際音樂告訴你,歡迎你的立刻加入
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件 參觀發表人的個人網站 MSN Messenger
從之前的文章開始顯示:   
發表新主題   回覆主題     1頁(共1頁)
【飛肯】教學網站 首頁 » 【DW PHP 資料庫】問題討論區

 
所有的時間均為 台北時間 (GMT + 8 小時)
前往:  

回首頁】【最新開課訊息】【企業委訓】【範例教學分享區】【問題討論區