[原] PHP檔案及目錄操作總結(一)

weixin_33816946發表於2012-02-24

一. 檔案操作: 

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) 除了檔案訪問許可權限制外, 沒有簡單的辦法區分不同級別的資料訪問.

如: 構建合理的資料訪問控制許可權, 如何做?

相關文章