|
【DW PHP 資料庫】問題討論區 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
輕鬆聽音樂.樂活新品味;關於音樂的大小事,就讓立峰國際音樂告訴你,歡迎你的立刻加入 |
|
| 回頂端 |
|
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 次修改 |
|
| 回頂端 |
|
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);
?>
|
這段程式碼是錯的,就如我之前說的,他在寫入新資料時會同時清掉舊資料,造成資料永遠只有一筆而已
輕鬆聽音樂.樂活新品味;關於音樂的大小事,就讓立峰國際音樂告訴你,歡迎你的立刻加入 |
|
| 回頂端 |
|
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+來寫入資料,這樣新的資料才會在檔案的最頂端
輕鬆聽音樂.樂活新品味;關於音樂的大小事,就讓立峰國際音樂告訴你,歡迎你的立刻加入 |
|
| 回頂端 |
|
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合併數組並儲存進文件中
輕鬆聽音樂.樂活新品味;關於音樂的大小事,就讓立峰國際音樂告訴你,歡迎你的立刻加入 |
|
| 回頂端 |
|
|
 |
|
第1頁(共1頁) |
|
所有的時間均為 台北時間 (GMT + 8 小時)
|
【回首頁】【最新開課訊息】【企業委訓】【範例教學分享區】【問題討論區】
|