本文主要和大家分享PHP檔案操作執行個體,即記錄日誌、目錄、檔案的遍曆、上傳、多方法得到副檔名、檔案引用方式、引用函數區別。
1. 檔案建立:fopen()
$file = fopen("test.txt","r");
"r" |
唯讀方式開啟,將檔案指標指向檔案頭。 |
"r+" |
讀寫方式開啟,將檔案指標指向檔案頭。 |
"w" |
寫入方式開啟,將檔案指標指向檔案頭並將檔案大小截為零。如果檔案不存在則嘗試建立之。 |
"w+" |
讀寫方式開啟,將檔案指標指向檔案頭並將檔案大小截為零。如果檔案不存在則嘗試建立之。 |
"a" |
寫入方式開啟,將檔案指標指向檔案末尾。如果檔案不存在則嘗試建立之。 |
"a+" |
讀寫方式開啟,將檔案指標指向檔案末尾。如果檔案不存在則嘗試建立之。 |
2. 檔案開啟關閉:fopen(),fclose()
3. 檔案末尾檢查:feof()
函數檢測是否已到達檔案末尾.
4. 檔案讀取:fread(),file(), file_get_contents(), fgetc(),fgets()
1. fread(file,length)
從檔案指標 file 讀取最多 length 個位元組,length(必須)
2. file_get_contents(file)
將檔案的內容讀入到一個字串中的首選方法
3. file(file)
把整個檔案讀入一個數組中, 數組中的每個單元都是檔案中相應的一行,包括分行符號在內。
4. fgetc(file)
從檔案指標中讀取一個字元
5. fgets(file,length)
從檔案指標中讀取一行, 碰到分行符號(包括在傳回值中)、EOF 或者已經讀取了 length - 1 位元組後停止(要看先碰到那一種情況)。
5. 檔案指標:
fseek(file,offset,whence)
把檔案指標從當前位置向前或向後移動到新的位置,新位置從檔案頭開始以位元組數度量。
whence可選。可能的值:
SEEK_SET - 設定位置等於 offset 位元組。預設。
SEEK_CUR - 設定位置為當前位置加上 offset。
SEEK_END - 設定位置為檔案末尾加上 offset (要移動到檔案尾之前的位置,offset 必須是一個負值)。 fseek($fp,-2, SEEK_END);//移動指標到檔案末尾
ftell() 返迴文件指標的當前位置。
rewind() 移動檔案指標到檔案的開頭。
另:php讀取超大檔案的方法
使用PHP的 fseek 來進行檔案操作
這種方式是最為普遍的方式,它不需要將檔案的內容全部讀入內容,而是直接通過指標來操作,所以效率是相當高效的。
<?php$fp = fopen($file, "r");$pos = 0;$t = " ";$data = "";while (!feof($fp)) { while ($t != "\n") { fseek($fp, $pos); $t = fgetc($fp); $pos ++; } $t = " "; $data .= fgets($fp);}fclose ($fp);echo $data?>
6. 擷取副檔名:
1. substr(strrchr($filename, '.'), 1);
2. substr($filename, strrpos($filename, '.')+1);
3. end(explode('.', $filename));
4. pathinfo($filename, PATHINFO_EXTENSION); (PHP Filesystem 函數)
7. 目錄與檔案遍曆:
function traverse($path){ $current_dir = opendir($path); //opendir()返回一個目錄控制代碼,失敗返回false while(($file = readdir($current_dir)) !==false) {//readdir()返回開啟目錄控制代碼中的一個條目 $sub_dir = $path .DIRECTORY_SEPARATOR(‘/’) . $file; //構建子目錄路徑if($file == '.' || $file== '..') { continue; } else if(is_dir($sub_dir)) { //如果是目錄,進行遞迴 echo 'Directory ' . $file .':<br>'; traverse($sub_dir); } else { //如果是檔案,直接輸出 echo 'File in Directory ' . $path .': ' . $file . '<br>'; }}closedir($current_dir); }//記得開啟後要關閉目錄控制代碼哦
8. 檔案鎖定
flock(file,lock,block)
函數鎖定或釋放檔案。若成功,則返回true。若失敗,則返回 false。
Lock 參數可以是以下值之一:
· 要取得共用鎖定定(讀取的程式),將 lock 設為LOCK_SH (share)
· 要取得獨佔鎖定(寫入的程式),將 lock 設為LOCK_EX (exclusive)
· 要釋放鎖定(無論共用或獨佔),將 lock 設為 LOCK_UN
· 如果不希望 flock() 在鎖定時堵塞,則給lock 加上LOCK_NB
block可選。若設定為 1 或 true,則當進行鎖定時阻擋其他進程。
<?php$file = fopen("test.txt","w+");// 排它性的鎖定if (flock($file,LOCK_EX)) { fwrite($file,"Write something"); // release lock flock($file,LOCK_UN); }else { echo "Error locking file!"; }fclose($file);?>
共用鎖定與獨佔鎖定的區別:
1.共用鎖定(S鎖):如果事務T對資料A加上共用鎖定後,則其他事務只能對A再加共用鎖定,不能加獨佔鎖定。獲准共用鎖定的事務只能讀資料,不能修改資料。
獨佔鎖定(X鎖):如果事務T對資料A加上獨佔鎖定後,則其他事務不能再對A加任任何類型的封鎖。獲准獨佔鎖定的事務既能讀資料,又能修改資料。
2.共用鎖定下其它使用者可以並發讀取,查詢資料。但不能修改,增加,刪除資料。資源共用.[1]