成人怡红院-成人怡红院视频在线观看-成人影视大全-成人影院203nnxyz-美女毛片在线看-美女免费黄

站長資訊網
最全最豐富的資訊網站

聊聊怎么利用PHP讀取大文件(教程分享)

PHP如何讀取大文件?下面本篇文章給大家介紹一下利用PHP讀取大文件的方法,希望對大家有所幫助!

聊聊怎么利用PHP讀取大文件(教程分享)

推薦課程:《Vue + TP6 + Mysql 社交電商系統(tǒng)開發(fā)視頻課》
API 文檔、設計、調試、自動化測試一體化協(xié)作工具:點擊使用

作為PHP開發(fā)人員,我們不需要擔心內存管理。 PHP引擎在我們背后進行了出色的清理工作,短暫執(zhí)行上下文的 web server 模型意味著即使是最草率的代碼也沒有持久的影響。

在極少數(shù)情況下,我們可能需要走出舒適的界限 — 例如,當我們嘗試在可以創(chuàng)建的最小 VPS 上為大型項目運行 Composer 時,或者需要在同樣小的服務器上讀取大文件時。

這是我們將在本教程中討論的一個問題。

本教程的代碼可以在這里找到 GitHub。

衡量成功

唯一能確認我們對代碼所做改進是否有效的方式是:衡量一個糟糕的情況,然后對比我們已經應用改進后的衡量情況。換言之,除非我們知道“解決方案”能幫我們到什么程度(如果有的話),否則我們并不知道它是否是一個解決方案。

我們可以關注兩個指標。首先是CPU使用率。我們要處理的過程運行得有多快或多慢?其次是內存使用率。腳本執(zhí)行要占用多少內存?這些通常是成反比的—這意味著我們能夠以CPU使用率為代價減少內存的使用率,反之亦可。

在一個異步處理模型(例如多進程或多線程PHP應用程序)中,CPU和內存使用率都是重要的考量。在傳統(tǒng)PHP架構中,任一達到服務器所限時這些通常都會成為一個麻煩。

測量PHP內部的CPU使用率是難以實現(xiàn)的。如果你確實關注這一塊,可用考慮在Ubuntu或macOS中使用類似于 top 的命令。對于Windows,則可用考慮使用Linux子系統(tǒng),這樣你就能夠在Ubuntu中使用 top 命令了。

在本教程中,我們將測量內存使用情況。我們將看一下“傳統(tǒng)”腳本會使用多少內存。我們也會實現(xiàn)一些優(yōu)化策略并對它們進行度量。最后,我希望你能做一個合理的選擇。

以下是我們用于查看內存使用量的方法:

// formatBytes 方法取材于 php.net 文檔  memory_get_peak_usage();  function formatBytes($bytes, $precision = 2) {     $units = array("b", "kb", "mb", "gb", "tb");      $bytes = max($bytes, 0);     $pow = floor(($bytes ? log($bytes) : 0) / log(1024));     $pow = min($pow, count($units) - 1);      $bytes /= (1 << (10 * $pow));      return round($bytes, $precision) . " " . $units[$pow]; }

我們將在腳本的結尾處使用這些方法,以便于我們了解哪個腳本一次使用了最多的內存。

我們有什么選擇?

我們有許多方法來有效地讀取文件。有以下兩種場景會使用到他們。我們可能希望同時讀取和處理所有數(shù)據(jù),對處理后的數(shù)據(jù)進行輸出或者執(zhí)行其他操作。 我們還可能希望對數(shù)據(jù)流進行轉換而不需要訪問到這些數(shù)據(jù)。

想象以下,對于第一種情況,如果我們希望讀取文件并且把每 10,000 行的數(shù)據(jù)交給單獨的隊列進行處理。我們則需要至少把 10,000 行的數(shù)據(jù)加載到內存中,然后把它們交給隊列管理器(無論使用哪種)。

對于第二種情況,假設我們想要壓縮一個 API 響應的內容,這個 API 響應特別大。雖然這里我們不關心它的內容是什么,但是我們需要確保它被以一種壓縮格式備份起來。

這兩種情況,我們都需要讀取大文件。不同的是,第一種情況我們需要知道數(shù)據(jù)是什么,而第二種情況我們不關心數(shù)據(jù)是什么。接下來,讓我們來深入討論一下這兩種做法…

逐行讀取文件

PHP 處理文件的函數(shù)很多,讓我們將其中一些函數(shù)結合起來實現(xiàn)一個簡單的文件閱讀器

// from memory.php  function formatBytes($bytes, $precision = 2) {     $units = array("b", "kb", "mb", "gb", "tb");      $bytes = max($bytes, 0);     $pow = floor(($bytes ? log($bytes) : 0) / log(1024));     $pow = min($pow, count($units) - 1);      $bytes /= (1 << (10 * $pow));      return round($bytes, $precision) . " " . $units[$pow]; }  print formatBytes(memory_get_peak_usage());
// from reading-files-line-by-line-1.php function readTheFile($path) {     $lines = [];     $handle = fopen($path, "r");      while(!feof($handle)) {         $lines[] = trim(fgets($handle));     }      fclose($handle);     return $lines; }  readTheFile("shakespeare.txt");  require "memory.php";

我們正在閱讀一個包括莎士比亞全部著作的文本文件。該文件大小大約為 5.5 MB。內存使用峰值為 12.8 MB?,F(xiàn)在,讓我們使用生成器來讀取每一行:

// from reading-files-line-by-line-2.php  function readTheFile($path) {     $handle = fopen($path, "r");      while(!feof($handle)) {         yield trim(fgets($handle));     }      fclose($handle); }  readTheFile("shakespeare.txt");  require "memory.php";

文件大小相同,但是內存使用峰值為 393 KB。這個數(shù)據(jù)意義大不大,因為我們需要加入對文件數(shù)據(jù)的處理。例如,當出現(xiàn)兩個空白行時,將文檔拆分為多個塊:

// from reading-files-line-by-line-3.php  $iterator = readTheFile("shakespeare.txt");  $buffer = "";  foreach ($iterator as $iteration) {     preg_match("/n{3}/", $buffer, $matches);      if (count($matches)) {         print ".";         $buffer = "";     } else {         $buffer .= $iteration . PHP_EOL;     } }  require "memory.php";

有人猜測這次使用多少內存嗎?即使我們將文本文檔分為 126 個塊,我們仍然只使用 459 KB 的內存。鑒于生成器的性質,我們將使用的最大內存是在迭代中需要存儲最大文本塊的內存。在這種情況下,最大的塊是 101985 個字符。

我已經寫過 使用生成器提高性能 以及 生成器擴展包,感興趣的可以去查看

贊(0)
分享到: 更多 (0)
?
網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
亚洲AV无码精品色午夜蛋壳| 亚洲国产精品特色大片观看完整版 | 欧美一卡二卡三卡四卡视| 人妻中字视频中文乱码| 私密按摩高潮熟女啪啪| 亚洲AV片不卡无码久久| 一本大道久久东京热无码AV| 99久久精品国产波多野结衣| 边做边爱MP3在线播放免费观看| 国产白浆喷水在线视频| 国产一在线精品一区在线观看| 狠狠人妻熟妇av又粗又大| 久久久亚洲欧洲日产国码二区| 免费看成人AV片| 日韩一区国产二区欧美三区| 性猛交ⅩXXX富婆video| 一二三四免费观看在线6| JAVAPARSER少妇高潮| 国产传媒精品1区2区3区 | 亚洲国产成人精品无码一区二区| 伊人精品久久久久7777| 啊轻点内射在线视频| 国产精品妇女一二三区| 久久亚洲AV午夜福利精品一区二 | JLZZJLZZJLZ亚洲日本| 国产成人人综合亚洲欧美丁香花| 机长脔到她哭H粗话H动漫| 女人和拘做受全过程免费| 色欲综合久久躁天天躁| 亚洲乱亚洲乱少妇无码| 99亚偷拍自图区亚洲| 国产精品久久久久JK制服| 久久婷婷五月综合97色一本一本| 日本19禁啪啪无遮挡免费| 亚洲AV无码一区东京热不卡| 中文字幕久无码免费久久| 国产超碰人人做人人爽AV大片| 久久不见久久见免费影院国语| 人妻无码AⅤ不卡中文字幕| 亚洲AV无码一区二区三区鸳鸯影| 51国产偷自视频区视频| 国产精品网站在线观看免费传媒| 久久亚洲人成网站| 熟婦久久无码人妻av蜜臀| 夜夜骚Av一区二区精品无码区| 成人无码区免费AⅤ片WWW| 精产国品一二三区别9977 | 久久天堂AV女色优精品| 日日噜噜夜夜狠狠视频无码| 亚洲性啪啪无码AV天堂| 绯色AV永久无码一区二区蜜臀| 久久精品免费观看国产| 少妇的丰满人妻HD高清| 与子敌伦刺激对白播放| 国产成人亚洲综合无码8 | 51精品人人搡人妻人人玩| 国产亚洲精品A在线无码| 欧洲亚洲1卡二卡三卡2021| 亚洲国产成人极品综合| 成年动作片AV免费网站| 久久久久久久97| 玩弄朋友娇妻呻吟交换电影| 7777奇米四色眼影| 狠狠精品干练久久久无码中文字幕| 人人妻人人澡人人爽人人| 亚洲性色AV片在线观看网址| 国产AV剧情片二区| 男人做一次爱能舒服多久| 亚洲国产精品一区二区成人片国内| 成人国产三级在线观看| 老司机午夜精品视频资源| 小SAO货都湿掉了高H奶头好硬| CHINESEHD国产精品麻豆| 精品无人区无码乱码大片国产| 天天干天天射天天操| CHINESE熟女老太HD| 久久精品国产亚洲无删除| 无码人妻一区二区三区兔费 | 欧美亚洲国产一区二区三区| 亚洲伊人成无码综合网| 国产精品久久香蕉免费播放| 人妻人人澡人人添人人爽人人玩| 一本大道香蕉在线精品| 国产午夜激无码AV毛片| 色既是空在线观看| 99无人区码一码二码三码四码 | 国产佗精品一区二区三区| 日系女生裸妆素颜| AV电影在线观看| 久久亚洲国产成人影院| 亚洲VA中文字幕| 国产精品亚洲第一区焦香味| 日本一本免费一区二区三区免| 性欧美玩弄性少妇HD| 亚洲国产精品无码中文字视| 公和我做好爽添厨房在线观看| 欧美性爱在线视频| 真实国产乱子伦精品一区二区三区| 精品高潮呻吟AV久久无码| 午夜伦4480YY私人影院免费 | 日韩无码一区视频| AV免费啪啪永久| 免费看又黄又无码的网站| 野花视频免费观看| 精品久久免费一区二区三区四区| 香港三日本三级少妇三级视频| 丁丁一进一出动态图| 人妻丰满熟妇av无码区HD优| 99精品无人区乱码在线观看 | 18禁白丝超短裙自慰喷水| 久久免费的精品国产V∧| 亚洲人妻免费视频| 精品乱码久久久久久中文字幕| 亚洲AV日韩AV高潮潮喷无码| 国产精华AV午夜在线观看| 色欲香天天综合网站| 大帝A∨无码视频在线播放| 人妻无码第一区二区三区 | 欧美香蕉爽爽人人爽| 91人妻人人爽人人狠狠| 免费无码AV片在线观看中文| 中国丰满人妻VIDEOSHD| 毛耸耸性XXXX毛耸耸| 与上司出轨的人妻| 免费观看日本XXXXX视频高潮| 中文无码日韩欧免费视频APP| 老旺的大肉蟒进进出出视频| 尤物AV无码国产在线看| 里面也请好好疼爱第三季| 野花日本HD免费高清版7| 老熟女与小伙偷欢视频| 最新版天堂资源中文官网| 欧美精产国品一二三产品| WWW.色五月.COM| 日产乱码一二三区别免费一| 荡公乱妇第1章95| 熟女少妇a性色生活片毛片| 国产CHINASEX对白VID| 挺进邻居丰满少妇的身体| 国产乱码一卡二卡3卡4卡网站| 西西大胆无码视频免费| 黄到让你下面湿的视频| 亚洲一区二区精品无码色欲Av| 老公带朋友来家里C我怎么办| 最新无码国产在线视频9299| 欧美私人家庭影院| 差差差软件大全APP推荐免费| 色婷婷AV一区二区三区浪潮| 国产精品久久无码一区二区三区网 | 欧美XXXX做受视频| 暗交小拗女一区二区| 少妇仑乱A毛片无码| 国产精品毛片无遮挡高清| 关晓彤露内毛黑森林| 国产猛烈高潮尖叫视频免费| 亚洲AⅤ成人精品无码| 豪妇荡乳1一5白玉兰免费下载| 亚洲日本VA午夜中文字幕一区| 麻豆国产成人AV高清在线观看| 91人人澡人人爽内射电影院| 日韩精品卡2卡3卡4卡5| 国产精品揄拍100视频| 亚洲精品无码成人片| 日本少妇自慰高清喷浆| 国精品无码一区二区三区在线蜜臀 | 黑人巨大高潮喷水AV| 国产丰满老熟女重口对白| 播放少妇的奶头出奶水的毛片| 中文字幕无码人妻丝袜| 一区二区三区欧美| 一本久久A久久免费精品不卡| 野花日本大全免费观看版动漫| 亚洲啪啪AV无码片| 亚洲中久无码永久在线观看同| 亚洲中文精品久久久久久不卡| 一本久道久久综合狠狠爱| 野花韩国高清免费视频6| 在线观看内射亲妹妹无套内射| 性欧美乱妇COME | 天堂√在线中文资源网| 国产粗话肉麻对白在线播放| 怡红院A∨人人爰人人爽| 日欧 片内射AV在线影院| 欧美精品中文字幕亚洲专区| 996热RE视频精品视频这里| 蜜臀av蜜臀一区二区三区| 激情射精爆插热吻无码视频| 丰满妇女强高潮ⅩXXX| CHINESE国产AVVIDE| 亚洲AVSSS在线观看| 日本高清视频www| 久久香蕉超碰97国产精品 | 日欧一片内射VA在线影院| 成.人.大.片在线观看| 亚洲精品国产美女久久久99 | 琪琪电影网WWW888DVDC| 无码专区6080YY免费视频| 精品成人免费一区二区| 国产极品美女高潮无套APP| 亚洲不卡无码AV中文字幕|