關於這兩個函數的官方解釋是這樣的:
fread() 函數讀取文件(可安全用於二進制文件)。
語法
fread(file,length)
參數 | 描述 |
---|---|
file | 必需。規定要讀取打開文件。 |
length | 必需。規定要讀取的最大字節數。 |
說明
fread() 從文件指針 file 讀取最多 length 個字節。該函數在讀取完最多 length 個字節數,或到達 EOF 的時候,或(對於網絡流)當一個包可用時,或(在打開用戶空間流之后)已讀取了 8192 個字節時就會停止讀取文件,視乎先碰到哪種情況。
返回所讀取的字符串,如果出錯返回 false。
file_get_contents()
定義和用法
file_get_contents() 函數把整個文件讀入一個字符串中。
和 file() 一樣,不同的是 file_get_contents() 把文件讀入一個字符串。
file_get_contents() 函數是用於將文件的內容讀入到一個字符串中的首選方法。如果操作系統支持,還會使用內存映射技術來增強性能。
語法
file_get_contents(path,include_path,context,start,max_length)
參數 | 描述 |
---|---|
path | 必需。規定要讀取的文件。 |
include_path | 可選。如果也想在 include_path 中搜尋文件的話,可以將該參數設為 "1"。 |
context | 可選。規定文件句柄的環境。 context 是一套可以修改流的行為的選項。若使用 null,則忽略。 |
start | 可選。規定在文件中開始讀取的位置。該參數是 PHP 5.1 新加的。 |
max_length | 可選。規定讀取的字節數。該參數是 PHP 5.1 新加的。 |
說明
對 context 參數的支持是 PHP 5.0.0 添加的。
提示和注釋
注釋:本函數可安全用於二進制對象。
首先,我不知道這兩個函數讀出來的數據有什么區別,我在網上找的讀取圖片為二進制的信息都是用到fread(),所以我不知道file_get_contents讀出來的是不是二進制,網上讀取圖片為二進制的代碼:
php讀取圖片成二進制流輸出
header( "Content-type: image/jpeg");
$PSize = filesize('1.jpg');
$picturedata = fread(fopen('1.jpg', "r"), $PSize);
echo $picturedata;
這幾行代碼表示已二進制讀出並顯示圖片,可惜我使用了讀出成功了但是沒有顯示成功,原因未知。
因為最近要做的項目的一個功能就是要把圖片已二進制的方式發送到手機端,之前對手機與服務器的交互有個很小白的觀念,以為服務器總是要返回json數據手機端才能接到(ノへ ̄、)所以我用fread()或者file_get_contents()取出數據后,怎么也不能以json的格式數據輸出,原因是json格式是要求utf8的編碼,而讀出來的是二進制,所以不行,這個問題大半天才搞明白Orz。。。而且服務器直接echo數據,手機端也能接受到,只不過有對象的時候用json封裝一下數據手機端好處理。