首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHP 文件指針控制:ftell()、fseek()、rewind() 精準定位讀寫

     編輯:PHP 綜合知識

三大指針操作函數

函數原型作用
ftell()int ftell(resource $handle)返回指針距文件開頭的字節偏移量
rewind()bool rewind(resource $handle)將指針重置到文件開頭(偏移 0)
fseek()int fseek(resource $handle, int $offset [, int $whence = SEEK_SET])移動指針到指定位置,支持相對/絕對定位

fseek() whence 參數詳解

常量含義offset 範例
SEEK_SET從文件開頭計算(默認)fseek($fp, 100) → 第 100 字節
SEEK_CUR從當前位置計算fseek($fp, 50, SEEK_CUR) → 向後 50 字節
SEEK_END從文件結尾計算fseek($fp, -100, SEEK_END) → 倒數 100 字節

返回值:成功返回 0,失敗返回 -1(如超出文件範圍)。

實戰演示:隨機讀取文件片段

<?php
$fp = fopen('data.txt', 'rb') or die("打開失敗");

echo "初始位置: " . ftell($fp) . "
"; // 0 // 讀取前 10 字節 echo "前10字節: " . fread($fp, 10) . "
"; echo "讀取後位置: " . ftell($fp) . "
"; // 10 // 相對當前位置 +100 fseek($fp, 100, SEEK_CUR); echo "相對移動後: " . ftell($fp) . "
"; // 110 // 讀取 110-120 字節 echo "110-120: " . fread($fp, 10) . "
"; // 定位到倒數 10 字節 fseek($fp, -10, SEEK_END); echo "最後10字節: " . fread($fp, 10) . "
"; // 重置到開頭 rewind($fp); echo "重置後位置: " . ftell($fp) . "
"; // 0 fclose($fp); ?>

關鍵注意事項

  • 追加模式(a/a+)寫入時忽略指針位置,數據總寫入文件末尾
  • 文本模式(無 b)下 fseek() 偏移量可能因換行符轉換不準確,二進制模式下精確
  • SEEK_END 配合負 offset 實現「讀取文件尾部」
  • 網絡流(HTTP/FTP)通常不支持 fseek(),僅本地文件有效

應用場景

  • 大文件斷點續傳(記錄已下載偏移量)
  • 日誌文件尾部實時追蹤(tail -f 效果)
  • 二進制文件結構解析(跳過 Header 讀取 Body)
  • 隨機訪問固定長度記錄(如簡易數據庫)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved