淺析php中如何在有限的內(nèi)存中讀取大文件
更新時間:2013年07月02日 10:45:20 作者:
突然遇到了一個要讀取超過80M文件的需求,很悲劇的,不管是file_get_content還是file什么的,都會將讀取的文件一次性加載到內(nèi)存中
正常情況下,我們可以使用fseek來讀取,好處就是不會一次性讀取,以下代碼只適合邊取邊處理的情況,不適合一次性讀取一次性處理。
可以用以下辦法生成測試文件
$file_handle = fopen("./csdn.txt", "rb+");
for ($index1 = 1; $index1 <= 2000000; $index1++) {
fwrite($file_handle, 'http://jb51.net'.$index1."\r");
}
fclose($file_handle);
讀取處理代碼如下:
$i = 0;
$now = '';
while ($i >= 0) {
if ($i>10) {
break;
}
fseek($file_handle, 0, SEEK_CUR);
$now = fgetc($file_handle);//可以自己寫個判斷false表示文件到頭
if ($now == "\r") {
echo '找到斷點';
}
echo $now;
$i++;
}
fclose($file_handle);
可以用以下辦法生成測試文件
復制代碼 代碼如下:
$file_handle = fopen("./csdn.txt", "rb+");
for ($index1 = 1; $index1 <= 2000000; $index1++) {
fwrite($file_handle, 'http://jb51.net'.$index1."\r");
}
fclose($file_handle);
讀取處理代碼如下:
復制代碼 代碼如下:
$i = 0;
$now = '';
while ($i >= 0) {
if ($i>10) {
break;
}
fseek($file_handle, 0, SEEK_CUR);
$now = fgetc($file_handle);//可以自己寫個判斷false表示文件到頭
if ($now == "\r") {
echo '找到斷點';
}
echo $now;
$i++;
}
fclose($file_handle);
您可能感興趣的文章:
- 訪問php時提示內(nèi)存位置訪問無效的解決辦法和思路分析
- 采用PHP函數(shù)memory_get_usage獲取PHP內(nèi)存清耗量的方法
- PHP中使用unset銷毀變量并內(nèi)存釋放問題
- phpExcel導出大量數(shù)據(jù)出現(xiàn)內(nèi)存溢出錯誤的解決方法
- php頁面消耗內(nèi)存過大的處理辦法
- 解析PHP中的內(nèi)存管理,PHP動態(tài)分配和釋放內(nèi)存
- PHP變量內(nèi)存分配問題記錄整理
- php出現(xiàn)內(nèi)存位置訪問無效錯誤問題解決方法
- PHP腳本內(nèi)存泄露導致Apache頻繁宕機解決方法
- php實現(xiàn)讀取內(nèi)存順序號
相關文章
如何提高MYSQL數(shù)據(jù)庫的查詢統(tǒng)計速度 select 索引應用
如何提高MYSQL數(shù)據(jù)庫的查詢統(tǒng)計速度 select 索引應用2007-04-04
php將字符串轉(zhuǎn)化成date存入數(shù)據(jù)庫的兩種方式
這篇文章主要介紹了php將字符串轉(zhuǎn)化成date存入數(shù)據(jù)庫的兩種方式,需要的朋友可以參考下2014-04-04
php實現(xiàn)通過stomp協(xié)議連接ActiveMQ操作示例
這篇文章主要介紹了php實現(xiàn)通過stomp協(xié)議連接ActiveMQ操作,結(jié)合實例形式分析了stomp擴展安裝及使用stomp擴展連接ActiveMQ具體操作技巧,需要的朋友可以參考下2020-02-02
php性能優(yōu)化之不要在for循環(huán)中操作DB
這篇文章主要為大家介紹了php性能優(yōu)化之不要在for循環(huán)中操作DB示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-06-06
PHP 通過Socket收發(fā)十六進制數(shù)據(jù)的實現(xiàn)代碼
以下是對PHP中通過Socket收發(fā)十六進制數(shù)據(jù)的實現(xiàn)代碼進行了分析介紹。需要的朋友可以過來參考下2013-08-08

