1.傳統的方法 fopen, fclose
feof:file、end of file
例子:
$file_handle = fopen("c:\\myfile.txt", "r");//使用fopen打開與文件的連接
while (!feof($file_handle)) { //使用feof判斷是否到達文件末尾
$line = fgets($file_handle); //使用fgets按行讀取文件內容
echo $line;
}
fclose($file_handle); //最后使用fclose關閉與文件的連接
過程: 1. fopen -> feof -> fgets -> fclose
打開 讀取 關閉
注意:如果是從二進制文件讀取以獲得跨平台兼容性,則應當將 r 更改為 rb
2. 以fgetss取代fgets
fgetss() 函數從打開的文件中讀取一行並過濾掉 HTML 和 PHP 標記。
與 fgets() 相同,不同的是 fgetss 嘗試從讀取的文本中去掉任何 HTML 和 PHP 標記。
例子:
<?php
$file = fopen("test.htm","r");
echo fgetss($file);
fclose($file);
?>
當然也可以通過傳遞第三個參數來指定哪些標記是允許輸出的:
<?php
$file = fopen("test.htm","r");
echo fgetss($file,1024,"<p>,<b>");//<p>和<b>標記將不會被過濾
fclose($file);
?>
詳細信息參考:http://www.w3school.com.cn/php/func_filesystem_fgetss.asp
3. 以二進制讀取 fread取代fgets
同樣需要打開文件連接 fopen
$fh = fopen("c:\\myfile.txt", "rb");//rb是兼容二進制讀取
$data = fread($fh, filesize("c:\\myfile.txt"));
fclose($fh);
特別注意:fread()雖然可以通過第二個參數來指定讀取文件的長度,但最長只能讀取8192個字節(8kb),
如果文件長度超過8k則需要循環讀取
4.將整個文件讀入到一個字符串的方法 file_get_contents()
詳細可見:PHP的file_get_contents()方法,將整個文件讀入字符串中
5.將整個文件讀入到一個數組中返回 file()
<?php
print_r(file("c:\\abc.txt"));//結果將abc.txt文件的每一行當成數組的每個元素返回
?>
6. 非線性文件處理 fseek
以上函數只允許順序讀取文件,當需要來回跳轉到文件的不同部分。這時就得用 fseek 。
5.1. fseek($fh, 0); //跳轉回文件的開頭
5.2. fseek($fh, 1024);//返回前1024字節前面
從 PHP V4.0 新增功能:
5.3. fseek($fh, 100, SEEK_CUR);//從當前位置向前跳轉 100 個字節
5.4. fseek($fh, -100, SEEK_CUR);//向后跳轉 100 個字節
5.5. fseek($fh, -100, SEEK_END);//向后跳轉至文件末尾前 100 個字節處
參考:http://www.ibm.com/developerworks/cn/opensource/os-php-readfiles/
