一. 檔案操作:
1. 寫檔案
常規:
fopen -- 開啟檔案 (注: 檔案模式)
fwrite(fputs--別名) -- 寫資料
fclose -- 關閉檔案
備註:
檔案模式, 常用的有8種(r,r+,w,w+,x,x+,a,a+),另外還有b(推薦)和t(不推薦).
簡單:
file_put_contents() -- 效果等同上面的操作. 第3個引數可以控制是否刪除已有內容.
2. 讀檔案
常規:
1)
fopen -- 開啟檔案
2)
i. fgetc -- 每次讀取單個字串(不常使用)
ii. fgets/fgetss/fgetcsv -- 每次讀取一行資料
fgetss與fgets區別是, fgetss可以過濾PHP和HTML標記.
fgetcsv可以使用定界符, 在處理excel或者逗號分隔的檔案時容易實現.
iii. fpassthru -- 讀取整個檔案, 將檔案輸出到標準輸出(如:瀏覽器), 返回值是false或者輸出的字元數目.
iv. fread -- 讀取指定長度的資料, 返回值為字串
3)
fclose --關閉檔案
4)
feof -- 讀取檔案時, 注意判斷是否到檔案結尾
簡單:
readfile/file/file_get_contents -- 讀取整個檔案
readfile: 會將檔案內容輸出到標準輸出 (如: 瀏覽器)
file: 會將檔案內容返回到一個陣列中, 每行就是一個元素.
file_get_contents: 會將整個檔案內容返回到字串中,二進位制安全. (優先使用)
3. 其他函式
file_exists: 判斷檔案是否存在
filesize: 返回檔案大小, 單位: 位元組
unlink: 刪除檔案.
rewind: 檔案指標復位到檔案開始.
fseek: 移動檔案指標到某個位置.
ftell: 報告檔案指標當前位置. 單位: 位元組
4. 檔案鎖定
為了避免同時操作, 引入檔案鎖定函式flock, 操作值有4中:
LOCK_SH: 讀鎖定. 檔案可共享, 其他人也可以讀.
LOCK_EX: 寫鎖定. 不能被共享.
LOCK_UN: 釋放所有鎖定.
LOCK_NB: 防止請求加鎖時阻塞.
5. PHP操作檔案的缺點:
1) 檔案變大時, 操作會變慢;
如: 操作一個200MB的文字檔案, 如何做?
2) 查詢記錄非常困難.
如: 二分法查詢或者定長記錄查詢關鍵字域, 如何做?
3) 併發訪問問題.
如: 高併發訪問時, 需要等待檔案解鎖, 如何做?
4) 隨機插入記錄,編輯或者刪除記錄比較困難
如: 檔案中間插入記錄,修改,刪除記錄,如何做? 如果檔案很大(200MB), 如何做?
5) 除了檔案訪問許可權限制外, 沒有簡單的辦法區分不同級別的資料訪問.
如: 構建合理的資料訪問控制許可權, 如何做?