1、直接讀文件相比數(shù)據(jù)庫查詢效率更勝一籌,而且文中還沒算上連接和斷開的時間。
成都創(chuàng)新互聯(lián)公司堅持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都網(wǎng)站設(shè)計、成都做網(wǎng)站、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時代的鐘山網(wǎng)站設(shè)計、移動媒體設(shè)計的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!
2、一次讀取的內(nèi)容越大,直接讀文件的優(yōu)勢會越明顯(讀文件時間都是小幅增長,這跟文件存儲的連續(xù)性和簇大小等有關(guān)系),這個結(jié)果恰恰跟天緣預(yù)料的相反,說明MYSQL對更大文件讀取可能又附加了某些操作(兩次時間增長了近30%),如果只是單純的賦值轉(zhuǎn)換應(yīng)該是差異偏小才對。
3、寫文件和INSERT幾乎不用測試就可以推測出,數(shù)據(jù)庫效率只會更差。
4、很小的配置文件如果不需要使用到數(shù)據(jù)庫特性,更加適合放到獨立文件里存取,無需單獨創(chuàng)建數(shù)據(jù)表或記錄,很大的文件比如圖片、音樂等采用文件存儲更為方便,只把路徑或縮略圖等索引信息放到數(shù)據(jù)庫里更合理一些。
5、PHP上如果只是讀文件,file_get_contents比fopen、fclose更有效率,不包括判斷存在這個函數(shù)時間會少3秒左右。
6、fetch_row和fetch_object應(yīng)該是從fetch_array轉(zhuǎn)換而來的,我沒看過PHP的源碼,單從執(zhí)行上就可以說明fetch_array效率更高,這跟網(wǎng)上的說法似乎相反。
$myfile = fopen("webdictionary.txt", "r") or die("Unable to open file!");
$txt= fread($myfile,filesize("webdictionary.txt"));
fclose($myfile);
fopen讀取txt文件的內(nèi)容,返回字符串,把它存入一個變量,再把變量值存入數(shù)據(jù)庫。可以看看這個函數(shù)
第一步,讀取txt的文件。假設(shè)為a.txt
$content = file_get_content('a.txt'); //讀取文件內(nèi)容存入變量。
第二步,存入數(shù)據(jù)庫
mysql_query("insert 表名 (字段名) values('".$content."'));
Ps:文件是上傳的,上傳后的臨時文件名是:$_FILE['tmp_name']
如果你做的這個系統(tǒng)規(guī)模不大,數(shù)據(jù)應(yīng)用不頻繁,那么文件系統(tǒng)完全是可以接受的,但如果你的系統(tǒng)規(guī)模比較大,同時數(shù)據(jù)是頻繁更新和變化的,那么讀寫數(shù)據(jù)庫的效率肯定會比文件高很多。
我建議一下吧,文本數(shù)據(jù)庫的例子本來太多,但是為了邏輯簡化,最好通過專門接口實現(xiàn)文件與數(shù)據(jù)的轉(zhuǎn)換,可以采用我下面的模板編寫:
?php
//文件最前面定義兩個全局變量,數(shù)據(jù)庫文件名和用戶數(shù)組
$pwd_db_file='db.txt';
$UserPassword=array();
//下面的pwd_db_read函數(shù),把文件內(nèi)容讀入到全局?jǐn)?shù)組中
function pwd_db_read(){
global $pwd_db_file, $UserPassword;
$fp=fopen($pwd_db_file,'r');
while ($s=fgets($fp)){
list($usr,$pwd)=explode('|', $s);
$UserPassword[$usr]=$pwd;
}
fclose($fp);
}
//下面的pwd_db_write函數(shù)保存數(shù)組內(nèi)容到文件中
function pwd_db_write(){
global $pwd_db_file, $UserPassword;
fp=fopen($pwd_db_file, 'w');
foreach ($UserPassword as $usr=$pwd)
fputs($fp,"$usr|$pwd\n");
fclose($fp);
}
//有了上面的全局變量和函數(shù),要寫什么功能都簡單
//下面假釋本腳本調(diào)用的時候通過reg.php?job=adduser=...pass=...
//的格式進行調(diào)用,job為add表示添加用戶,del表示刪除,modi表示修改
//另外的user和pass表示用戶名或者密碼,job不是以上內(nèi)容表示登錄
//主程序一開始就打開數(shù)據(jù)庫
pwd_db_read();
//下面判斷功能
if ($jon=='add'){
if (array_key_exists($user,$UserPassword)) echo "用戶 $user 已經(jīng)存在!"
else $UserPassword[$user]=$pass;//就一句話,簡單吧
}elseif (job=='del'){
unset($UserPassword[$user]);//你自己考慮編寫是否確認(rèn)刪除的內(nèi)容
}elseif ($job=='modi'){
if (array_key_exists($user,$UserPassword)) $UserPassword[$user]=$pass;//和添加是不是有點類似
else echo "用戶 $user 不存在!"
}else{
if ($UserPassword[$user]==$pass){
echo '密碼正確。';
//接下來可能要做許多事情
}else echo '密碼錯誤!';
}
//程序最后保存數(shù)據(jù)庫修改
pwd_db_write();
?
看得懂嗎,沒有上機調(diào)試,語法問題可能難免,如果發(fā)現(xiàn)不明白的問題請補充。