在對檔案進行讀寫過程中,有時需要在檔案中跳轉、同不同位置讀取,以及将資料寫入到不同的位置。例如,使用檔案模拟資料庫儲存資料,就需要移動檔案指針。指針的位置是以從檔案頭開始的位元組數度量的,預設以不同模式打開檔案時,檔案指針通常在檔案的開頭或是結尾處,可以通過ftell()、fseek()和rewind()三個函數對檔案指針進行操作,它們的原型如下所示:
int ftell(resource handle) //傳回檔案指針的目前位置
int fseek(resource hanlde,int offset[,int whence]) //移動檔案指針到指定位置
bool rewind(resource handle) //移動檔案指針到檔案的開頭
使用這些函數時,必須提供一個用fopen()函數打開的、合法的檔案指針。函數ftell()擷取由指定的資源中的檔案指針目前位置的偏移量;函數rewind()将檔案指針移回到指定資源的開頭;而函數fseek()函數則将指針移動到第二個參數offset指定的位置,如果沒有提供第三個可選參數whence,則位置将設定為從檔案開頭的offset位元組處。否則,第三個參數whence可以設定為三個可能的值,它将影響指針的位置。
★SEEK_CUR:設定指針位置為目前位置加上第二個參數所提供的offset位元組。
★SEEK_END:設定指針位置為EOF加上offset位元組。在這裡,offset必須設定為負值。
★SEEK_SET:設定指針位置為offset位元組處。這與忽略第三個參數whence效果相同。
如果fseek()函數執行成功,将傳回0,失敗則傳回-1.如果将檔案以追加模式“a”或“a+”打開,寫入檔案的任何資料是會被附加在後面,不會管檔案指針的位置。代碼如下所示:
$fp = fopen('data.txt' ,'r')or die("檔案打開失敗");
echo ftell($fp)."
"; //輸出剛打開檔案的指針預設位置,指針在檔案的開頭位置為0
echo fread($fp, 10)."
"; //讀取檔案中的前10個字元輸出,指針位置發生了變化
echo ftell($fp)."
"; //讀取檔案的前10個字元之後,指針移動的位置在第10個位元組處
fseek($fp, 100,SEEK_CUR); //又将指針移動到倒數10個位元組位置處
echo ftell($fp); //檔案的位置在110個位元組處
echo fread($fp,10)."
"; //讀取110到120位元組數位置的字元串,讀取後指針的位置為120
fseek($fp,-10,SEEK_END); //又将指針移動到倒數10個位元組位置處
echo fread($fp, 10)."
"; //輸出檔案中最後10個字元
rewind($fp); //又移動檔案指針到檔案的開頭
echo ftell($fp); //指針在檔案的開頭位置,輸出0
fclose($fp);
?>