亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 網站 > 建站經驗 > 正文

PHP如何快速讀取大文件

2024-04-25 20:36:25
字體:
來源:轉載
供稿:網友

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

需求需求

有一個800M的日志文件,大約有500多萬行, 用PHP返回最后幾行的內容。

實現方法

1. 直接采用file函數來操作

由于 file函數是一次性將所有內容讀入內存,而PHP為了防止一些寫的比較糟糕的程序占用太多的內存而導致系統內存不足,使服務器出現宕機,所以默認情況下限制只能最大使用內存16M,這是通過php.ini里的 memory_limit = 16M 來進行設置,這個值如果設置-1,則內存使用量不受限制。

下面是一段用file來取出這具文件最后一行的代碼:

<?phpini_set('memory_limit', '-1');$file = 'access.log';$data = file($file);$line = $data[count($data) - 1];echo $line;?>
整個代碼執行完成耗時 116.9613 (s)。

我機器是2個G的內存,當按下F5運行時,系統直接變灰,差不多20分鐘后才恢復過來,可見將這么大的文件全部直接讀入內存,后果是多少嚴重,所以不在萬 不得以,memory_limit這東西不能調得太高,否則只有打電話給機房,讓reset機器了。

2.直接調用Linux的 tail 命令來顯示最 后幾行

在Linux命令行下,可以直接使用 tail -n 10 access.log 很輕易的顯示日志文件最后幾行,可以直接用PHP來調用tail命令,執行PHP代碼如下:

<?php$file = 'access.log';$file = escapeshellarg($file); // 對命令行參數進行安全轉義$line = `tail -n 1 $file`;echo $line;?>
整個代碼執行完成耗時 0.0034 (s)

3. 直接使用PHP的 fseek 來進行文件操作

這種方式是最為普遍的方式,它不需要將文件的內容全部讀入內容,而是直接通過指針來操作,所以效率是相當高效的。在使用fseek來對文件進行操作時,也有多種不同的方法,效率可能也是略有差別的,下面是常用的兩種方法:

方法一

首先通過fseek找到文件的最后一位EOF,然后找最后一行的起始位置,取這一行的數據,再找次一行的起始位置, 再取這一行的位置,依次類推,直到找到了$num行。

#實現代碼如下

<?php$fp = fopen($file, "r");$line = 10;$pos = -2;$t = " ";$data = "";while ($line > 0){ while ($t != "/n") { fseek($fp, $pos, SEEK_END); $t = fgetc($fp); $pos--; } $t = " "; $data .= fgets($fp); $line--;}fclose($fp);echo $data?>
整個代碼執行完成耗時 0.0095 (s)
方法二
還是采用fseek的方式從文件最后開始讀,但這時不是一位一位的讀,而是一塊一塊的讀,每讀一塊數據時,就將讀取后的數據放在一個buf里,然后通過換 行符(/n)的個數來判斷是否已經讀完最后$num行數據。

#實現代碼如下

<?php$fp = fopen($file, "r");$num = 10;$chunk = 4096;$fs = sprintf("%u", filesize($file));$max = (intval($fs) == PHP_INT_MAX) ? PHP_INT_MAX : filesize($file);for ($len = 0; $len < $max; $len += $chunk){ $seekSize = ($max - $len > $chunk) ? $chunk : $max - $len; fseek($fp, ($len + $seekSize) * -1, SEEK_END); $readData = fread($fp, $seekSize) . $readData; if (substr_count($readData, "/n") >= $num + 1) { preg_match("!(.*?/n){" . ($num) . "}$!", $readData, $match); $data = $match[0]; break; }}fclose($fp);echo $data;?>

整個代碼執行完成耗時 0.0009(s)。

方法三

<?phpfunction tail($fp, $n, $base = 5){ assert($n > 0); $pos = $n + 1; $lines = array(); while (count($lines) <= $n) { try { fseek($fp, -$pos, SEEK_END); } catch (Exception $e) { fseek(0); break; } $pos *= $base; while (!feof($fp)) { array_unshift($lines, fgets($fp)); } } return array_slice($lines, 0, $n);}var_dump(tail(fopen("access.log", "r+"), 10));?>

整個代碼執行完成耗時 0.0003(s)

 

 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲一级一级97网| 亚洲精品videossex少妇| 日韩精品免费在线观看| 欲色天天网综合久久| 国产手机视频精品| 色综合久综合久久综合久鬼88| 97精品欧美一区二区三区| 精品久久久av| 国产99久久精品一区二区 夜夜躁日日躁| 日本91av在线播放| 久久99热精品这里久久精品| 国产精品777| 精品福利樱桃av导航| 亚洲第一福利在线观看| 欧美日韩aaaa| 亚洲国产精品电影在线观看| 亚洲成人三级在线| 亚洲a一级视频| 国产一区二区三区精品久久久| 91热精品视频| 欧美成人激情视频免费观看| 视频在线观看一区二区| 久久久成人的性感天堂| 亚洲欧美日韩一区在线| 国产日韩在线亚洲字幕中文| 亚洲午夜久久久影院| 亚洲va男人天堂| 国产成人a亚洲精品| 日韩欧美成人精品| 日韩av在线直播| 欧美精品国产精品日韩精品| 亚州国产精品久久久| 91久久久久久| 色综合久综合久久综合久鬼88| 色樱桃影院亚洲精品影院| 日韩综合中文字幕| 久久精品国产91精品亚洲| 欧美日韩亚洲一区二区三区| 日本精品视频在线| 91精品视频在线| 精品久久久久久亚洲精品| 亚洲欧美另类在线观看| 国产一区二区在线播放| 国产精品羞羞答答| 欲色天天网综合久久| 国产精品视频成人| 亚洲a在线播放| 91国自产精品中文字幕亚洲| 97视频免费在线看| 国模精品视频一区二区| 久久久这里只有精品视频| 日韩精品久久久久| 日本欧美爱爱爱| 亚洲人午夜色婷婷| 久久亚洲精品中文字幕冲田杏梨| 日韩成人激情在线| 茄子视频成人在线| 777777777亚洲妇女| 欧美性猛交xxxxx免费看| 日韩中文理论片| 亚洲成人免费网站| 亚洲xxxx做受欧美| 在线观看精品国产视频| 911国产网站尤物在线观看| 日韩国产一区三区| 97精品国产aⅴ7777| 欧美激情极品视频| 国产精品成人va在线观看| 一本色道久久综合亚洲精品小说| 国产欧美日韩免费看aⅴ视频| 在线电影av不卡网址| 国产成人精品免高潮在线观看| 日韩免费不卡av| 最近2019中文字幕大全第二页| 亚洲精品一区二区三区婷婷月| 日韩欧美视频一区二区三区| 成人精品久久一区二区三区| 亚洲欧洲视频在线| 91av免费观看91av精品在线| 欧美成人中文字幕| 亚洲成人黄色网| 欧美性xxxxxxx| 欧美日本国产在线| 亚洲欧美999| 国产精品久久久久7777婷婷| 成人免费网站在线观看| 亚洲国产欧美久久| 精品国产拍在线观看| 国产精品日韩久久久久| 日本a级片电影一区二区| 伊人久久综合97精品| 麻豆乱码国产一区二区三区| 亚洲精品videossex少妇| 91精品国产99久久久久久| 中文字幕亚洲综合久久| 福利视频第一区| 欧美一二三视频| 国产精品日日摸夜夜添夜夜av| 亚洲精品久久久久久下一站| 国产精品海角社区在线观看| 欧美性猛交xxxx乱大交蜜桃| 91中文字幕在线观看| 91tv亚洲精品香蕉国产一区7ujn| 国产suv精品一区二区| 久久精品中文字幕一区| 亚洲欧美中文另类| 亚洲国产精品久久| 中文字幕日韩免费视频| 中文字幕av日韩| 8x海外华人永久免费日韩内陆视频| 中文字幕av一区| 欧美情侣性视频| 国产日本欧美一区| 欧美电影免费播放| 亚洲电影免费观看高清完整版| 精品久久久久久亚洲国产300| 久久久久久亚洲精品中文字幕| 欧美激情xxxx| 亚洲午夜国产成人av电影男同| 日韩欧美在线网址| 国产精品久久久久77777| 98精品在线视频| 在线亚洲男人天堂| 国产成人免费91av在线| 久久亚洲综合国产精品99麻豆精品福利| 日韩亚洲第一页| 国产精品一区二区av影院萌芽| 日本91av在线播放| 久久精品视频在线观看| 国产亚洲精品高潮| 亚洲天堂免费在线| 欧美日本高清一区| 亚洲美女黄色片| 2025国产精品视频| 国产91ⅴ在线精品免费观看| 97视频在线观看视频免费视频| **欧美日韩vr在线| 国产精品第10页| 国产成人涩涩涩视频在线观看| 欧美国产亚洲精品久久久8v| 国产精品成av人在线视午夜片| 欧美黄色三级网站| 国产免费观看久久黄| 久久影视三级福利片| 欧美成人亚洲成人| 91老司机精品视频| 日韩av不卡在线| 亚洲色图欧美制服丝袜另类第一页| 欧美精品生活片| 亚洲国产欧美在线成人app| 成人av在线网址| 国产成人avxxxxx在线看| 粗暴蹂躏中文一区二区三区| 欧美美最猛性xxxxxx| 色偷偷88888欧美精品久久久| 国产成人小视频在线观看| 欧美成人免费全部观看天天性色| 精品动漫一区二区三区| 97免费视频在线| 欧美在线一区二区三区四| 久久精品久久精品亚洲人| 国产亚洲欧洲高清一区| 91精品国产乱码久久久久久蜜臀| 久久综合伊人77777蜜臀|