php fread讀取文件注意事項(xiàng)
php fread函數(shù)介紹
string fread ( int handle, int length )
fread() 從文件指針 handle 讀取最多 length 個(gè)字節(jié)。該函數(shù)在讀取完最多 length 個(gè)字節(jié)數(shù),或到達(dá) EOF 的時(shí)候,或(對(duì)于網(wǎng)絡(luò)流)當(dāng)一個(gè)包可用時(shí),或(在打開用戶空間流之后)已讀取了 8192 個(gè)字節(jié)時(shí)就會(huì)停止讀取文件。
fread()實(shí)例:
<?php $file = "data.txt"; $fh = fopen($file, "rt"); $userdata = fread($fh, filesize($file)); fclose($fh); ?>
php使用fread需要注意的幾點(diǎn)
1、fread讀取寫入大文件出錯(cuò)的解決辦法
使用fread讀取文件時(shí)如果超過(guò)php.ini中設(shè)置的最大內(nèi)存使用值時(shí) 會(huì)提示錯(cuò)誤,下面的方法解決讀取大文件的問題:
<?
set_time_limit(0);//設(shè)置腳本執(zhí)行時(shí)間無(wú)限長(zhǎng)
$flie="flexbuilder_linux_install_a5_112409.bin";//大文件超過(guò)php.ini中的內(nèi)存配置
$fp=fopen($flie,"r");
$content="";
$filename="123.bin";//存為新文件
$handle=fopen($filename,"a");//寫入方式打開,將文件指針指向文件末尾。如果文件不存在則嘗試創(chuàng)建之
while(!feof($fp)){//測(cè)試文件指針是否到了文件結(jié)束的位置
$content=fread($fp,1024);
fwrite($handle,$content);
}
fclose($fp);
fclose($handle);
echo "數(shù)據(jù)成功寫入文件";
?>
2、php fread()是如何識(shí)別文件編碼的
<?php
$handler=fopen('a.txt','rb')//二進(jìn)制方式打開
$content=fread($handler,1024);
echo $content;
?>
fread以字符串形式返回,那它是如何識(shí)別a.txt使用的編碼方式的呢,才能保證不亂碼的呢?
PHP7.0以下的版本的文件操作中沒有識(shí)別字符編碼。
只是按字節(jié)數(shù)據(jù)輸出,如果和php源碼文件和輸出的html的字符編碼一致就能正確顯示。
3、fread讀取文件總是會(huì)多一個(gè)空字符
$fileSize = filesize($filePath);
$handle = fopen($filePath, "rb");
while (!feof($handle)) {
var_dump(fread($handle, $fileSize));
//會(huì)多輸出一次空字符
}
當(dāng)我們使用上面代碼讀取文件,有時(shí)會(huì)多一個(gè)空字符。這是因?yàn)槟闶荳INDOWS平臺(tái),文件是文本打開存儲(chǔ)的內(nèi)容,末尾會(huì)有一個(gè)特殊字節(jié)標(biāo)識(shí)文件結(jié)束,你用rb打開自然就可以讀到最后那個(gè)特殊字節(jié)了。用r打開,fgets讀吧。
通過(guò)此文希望能幫助到大家,謝謝大家對(duì)本站的支持!
相關(guān)文章
PHP中使用hidef擴(kuò)展代替define提高性能
這篇文章主要介紹了PHP中使用hidef擴(kuò)展代替define提高性能,本文著重測(cè)試hidef的性能,同時(shí)介紹了安裝方法和使用示例,需要的朋友可以參考下2015-04-04

