搞一波php讀取大檔案

2021-09-27 15:14:48 字數 2117 閱讀 2011

先是建立乙個大檔案

cat test.log >> test.log
當然前提是test.log本身有內容,如果你一不留神,可能你的檔案已經很大了,所以最好立即ctrl+c

ok,現在搞定了乙個大檔案。讓我們先試試直接讀取檔案的方式

<?php

$begin = microtime(true);

file('./test.log');

$end = microtime(true);

echo ($end-$begin).php_eol;

php fatal error:  allowed memory size of 134217728 bytes exhausted (tried to allocate 1324870912 bytes) in /data/www/magpie/test.php on line 3

fatal error: allowed memory size of 134217728 bytes exhausted (tried to allocate 1324870912 bytes) in /data/www/magpie/test.php on line 3

如果報這個錯,恭喜你,說明你的配置檔案較小,當然你也可以修改配置檔案,但是這已經脫離今天的主題了,那我們高階一下,

乙個字元乙個字元讀取檔案,這就需要用到fgetc函式

<?php

$begin = microtime(true);

$fp = fopen('./test.log', 'r+');

while (false !== fgetc($fp))

fclose($fp);

$end = microtime(true);

echo ($end-$begin).php_eol;

這樣我們就可以成功的讀取大檔案,本文結束。。。哈哈,開個玩笑,你會發現,讀取的很慢很慢。。。

我自己試了一下,本地的1.2g檔案,用這種方式讀取,需要花費51秒,太慢了,我們還需要高階

可以乙個字元乙個字元,那我們也可以一行一行的讀取檔案,這就需要fgets函式

<?php

$begin = microtime(true);

$fp = fopen('./test.log', 'r+');

while (false !== fgets($fp))

if (!feof($fp))

fclose($fp);

$end = microtime(true);

echo ($end-$begin).php_eol;

呲溜一下,秒讀取完,是不是成就感滿滿,我本地嘗試用這種方式,只需要1秒左右,就可以讀取完,效率提公升賊猛,

不過我們還沒有結束,我們搞搞別的方式,比如可以一行一行,那能不能我們在不超過配置記憶體的上限,一定容量的讀取呢

<?php

$begin = microtime(true);

$fp = fopen('./test.log','r+');

while (!feof($fp))

fclose($fp);

$end = microtime(true);

echo ($end-$begin).php_eol;

執行之後,我們會發現,又快了一些,我本地跑了一下,0.5秒左右,又提公升了一倍,很開心。

但是善於搞事情的我,怎麼能善罷甘休呢,把問題搞一下,我們讀取大檔案的最後五行內容,雖然我們還可以用fread函式解決,但是會不會有些蠢,這樣我們可以嘗試使用ftell和fseek兩個函式

<?php

$line = 5;

$pos = -1;

$ch = '';

$contents = '';

$fp = fopen('./test.log', 'r+');

while ($line > 0)

$ch = '';

$contents .= fgets($fp);

$line--;

}echo $contents;

ok,總算完事了

SVG簡單搞一波

svg 什麼是svg?svg 指可伸縮向量圖形 scalable vector graphics svg 用來定義用於網路的基於向量的圖形 svg 使用 xml 格式定義圖形 svg 影象在放大或改變尺寸的情況下其圖形質量不會有所損失 svg 是全球資訊網聯盟的標準 svg 與諸如 dom 和 xs...

php 讀取大檔案

在php中,對於檔案的讀取時,最快捷的方式莫過於使用一些諸如file file get contents之類的函式,簡簡單單的幾行 就能 很漂亮的完成我們所需要的功能。但當所操作的檔案是乙個比較大的檔案時,這些函式可能就顯的力不從心,下面將從乙個需求入手來說明對於讀取大檔案時,常用的操作方法。需求需...

php讀取大檔案

本文章來給各位同學介紹php中讀取大檔案實現方法詳解吧,有需要了解的同學可進入參考參考。需求如下 現有乙個1g左右的日誌檔案,大約有500多萬行,用php返回最後幾行的內容。實現方法 直接採用file函式來操作 注 由於 file函式是一次性將所有內容讀入記憶體,而php為了防止一些寫的比較糟糕的程...