當前位置:首頁 » 辦公資訊 » php怎樣讀取大文件

php怎樣讀取大文件

發布時間: 2023-05-07 16:44:14

① php有規律大文件的讀取與寫入

這幾天在做一個東西 研究PHP讀取行數較多的文件(大概上百萬行) 考慮到效率問題 進行了簡單的研究 總結如下

第一條 file()函數的效率問題

file()函數的效率很底下 如果是有規律的文件 比如每行一條相應數據 那麼盡量不要是用file()函數

可以使用file_get_contents()然後用explode切割 這樣效率會快三分之一

舉個例子:

文件樣式如下:

n

n

n

n

n

n

nnnnnnnnnnnn

如果用file($file)讀入的話 耗時很長

可以用如下方法explode("n" file_get_contents($file));效率會快很多

第二條 數組的遍歷方式

數據已經被讀入數組了 下面就是遍歷了

我所需要的是確定數組中有無一個值的存在 比如大消說 是蠢仿如否在數組中 首先想到的是in_array()

不過實驗了下發現效率很低下 於是參考別人的代碼想到一個辦法 把數組翻轉過來 變成所有值都為 原來的值變成了索引 那麼只要我在if里寫($arr[索引]== )去判斷帶啟 果然效率高出很多

在數組的遍歷過程中 如果數組個頭非常大 並且數組中的數據並不是全能用到的話 最好把用來遍歷的數組抽出來 這樣會提高很多效率

第三條 數組的存儲

把計算過後的數據保存起來 存在一個文件中 考慮了三種方法 一種是直接寫成php文件 一種是serialize 一種是json串

第一種方式

直接寫入文件 保存成PHP

需要的時候直接require進來

第二種方式 把變數serialize然後file_put_contents()進入文件 使用的時候unserialize就ok

第三種方式和第二種類似 只不過寫成了json串

lishixin/Article/program/PHP/201311/21126

② PHP實現在有限內存中的大文件讀取

方法鉛肢一:通過yield的生槐州世成器實現有限內存中的大跡源文件讀取

方法二:使用SPL 庫 提供的 SplFileObject 類

③ php 使用file_get_contents讀取大文件的方法

當我們遇到文本文件體積很大時,比如超過幾十M甚至幾百M幾G的大文件臘則,用記事本或者其它編輯器打開往往不能成功,因為他們都需要把文件內容全部放到內存裡面,這時就會發生內存溢出而打開錯誤,遇到這種情況我們可以使用PHP的文件讀取函數file_get_contents()進行分段讀取。
函數說明
string
file_get_contents
(
string
$filename
[,
bool
$use_include_path
[,
resource
$context
[,
int
$offset
[,
int
$maxlen
]]]]
)

file()
一樣,只除了
file_get_contents()
把文件讀入一棗局舉個字元串。將在參數
offset
所指定的位置開始讀取長度為
maxlen
的內容。如果失敗,file_get_contents()
將返回
FALSE。
file_get_contents()
函數是用來將文件的內容讀入到一個字元串中的首選方法。如果操作系統支持還會使用內存映射技術來增強性能。
應用:凳碧
復制代碼
代碼如下:
$str
=
$content=file_get_contents("2.sql",FALSE,NULL,1024*1024,1024);
echo
$str;
如果針對較小文件只是希望分段讀取並以此讀完可以使用fread()函數
復制代碼
代碼如下:
$fp=fopen('2.sql','r');
while
(!feof($fp)){
$str.=fread($fp,
filesize
($filename)/10);//每次讀出文件10分之1
//進行處理
}
echo
$str;

熱點內容
馬路上汽車的噪音在多少分貝 發布:2023-08-31 22:08:23 瀏覽:1885
應孕棒多少錢一盒 發布:2023-08-31 22:08:21 瀏覽:1357
標准養老金一年能領多少錢 發布:2023-08-31 22:05:05 瀏覽:1644
湖北通城接網線多少錢一個月 發布:2023-08-31 21:59:51 瀏覽:1724
開隨車吊車多少錢一個月 發布:2023-08-31 21:55:06 瀏覽:1486
京東付尾款怎麼知道前多少名 發布:2023-08-31 21:52:58 瀏覽:1809
在學校租鋪面一個月要多少錢 發布:2023-08-31 21:52:09 瀏覽:1947
2寸有多少厘米 發布:2023-08-31 21:50:34 瀏覽:1590
知道電壓如何算一小時多少電 發布:2023-08-31 21:46:20 瀏覽:1571
金手鐲54號圈周長是多少厘米 發布:2023-08-31 21:44:28 瀏覽:1745