先是建立乙個大檔案
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為了防止一些寫的比較糟糕的程...