在之前的文章《php文件操作之逐行讀取文件》中,我們介紹了逐行讀取文件的方法,然后利用循環我們可以獲取文件的全部數據。那如果不使用循環,如何獲取文件的全部數據?本篇文章就給大家介紹一下不借助循環,一次性獲得文件全部數據的方法。
PHP中一次性讀取文件全部數據有多種方法,今天主要來了解兩個函數fread()和readfile()。
我們有一個名為“test.txt”的文本文件,里面的內容為:
首先我們來了解fread()函數,看看下面的示例:
<?php header("Content-Type: text/html;charset=utf-8"); //設置字符編碼 $file = "test.txt"; $handle = fopen($file, 'r'); //打開文件 $contents = fread($handle, filesize($file)); //讀取文件內容 echo $contents; fclose($handle);//關閉文件 ?>
輸出結果:
可以看出,“test.txt”文件的內容全部輸出了。
其實,fread($handle,$length)
函數的作用是讀取打開文件$handle
中,指定$length
字符長度的字符。但當$length參數的值被指定為 “filesize($file)
”,那么就可以讀取整個文件的全部數據了。filesize()函數的作用是獲取文件大小,在 fread()函數中的作用就是讀取整個文件。
使用fread()讀取整個文件,還要先打開文件,計算整個文件的大小,讀取完還要關閉文件,有復雜,有沒有更簡便的?答案是有,可以使用readfile()函數。
我們看看下面的示例:
<?php header("Content-Type: text/html;charset=utf-8"); //設置字符編碼 $file = "test.txt"; readfile($file); //讀取文件內容 ?>
輸出結果:
是不是很簡單,直接使用一行代碼“readfile($file);
”就可以一次性獲得文件的全部數據了;不需要打開或關閉文件,也不需要使用echo
等輸出語句就可輸出文件內容。
下面我們來了解一下readfile()函數。
readfile($filename,$include_path,$context)
函數會讀取一個文件并將其寫入到輸出緩沖,同時返回從文件中讀入的字節數。
該函數接受1個必需參數$filename
(指定要讀取的文件名或文件路徑),2個可省略的參數$include_path
和$context
。
-
$include_path
參數:設定是否想要在 include_path (在 php.ini 中)中搜索該文件,默認為 FALSE;如果想,則設置參數值為 '1'。 -
$context
參數:設置文件句柄的環境
如果讀取失敗,readfile()函數會返回FALSE并附帶錯誤信息;我們可以通過在函數名前面添加一個 '@
' 來隱藏錯誤輸出。
@
是一個錯誤控制運算符,將其放置在一個 PHP 表達式之前,該表達式可能產生的任何錯誤信息都將被忽略掉。
好了就說到這里了,有其他想知道的,可以點擊這個哦。→ →PHP文件基礎操作
推薦:《PHP面試題大匯總(收藏)》《php視頻教程》