PHP學習筆記 5 有規律大檔案的讀取和寫入

2022-03-10 16:19:08 字數 1222 閱讀 4722

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

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

file()函式的效率很底下 如果是有規律的檔案.比如每行一條相應資料.那麼盡量不要是用file()函式

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

舉個例子:

檔案樣式如下:

11111\n

22222\n

33333\n

44444\n

55555\n

.....\n

nnnnnnnnnnn\n

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

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

第二條,陣列的遍歷方式.

資料已經被讀入陣列了.下面就是遍歷了.

我所需要的是確定陣列中有無乙個值的存在,比如說44444是否在陣列中.首先想到的是in_array()

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

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

第三條,陣列的儲存.

把計算過後的資料儲存起來.存在乙個檔案中.考慮了三種方法.一種是直接寫成php檔案.一種是serialize,一種是json串.

第一種方式

直接寫入檔案<?php 連線var_export($var)連線";"連線?>儲存成php

需要的時候直接require進來.

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

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

經過測試.發現第二種效率最高.第三種其次.和第二種效率不相上下.第一種最慢.和我預想的差距很大.真是大跌眼鏡.

--------------------------------------分割線------------------------------------------

ps:前幾天在網上看到一句話,覺得很有道理.說的是優秀的程式設計師要執著**的執行速度.而不是寫**的速度.

值得膜拜.

php大檔案的上傳

1.使用php 的創始人 rasmus lerdorf 寫的apc擴充套件模組來實現 http pecl.php.net package apc apc實現方法 複製php內容到剪貼簿 php if server request method post elseif isset get progre...

php讀取大檔案的方法

1 使用file 函式直接讀取 starttime microtime float ini set memory limit 1 file testfile.txt data file file line count data 總行數 lastline data count data 1 最後一行 ...

PHP上傳大檔案的設定方法

通過設定nginx的client max body size解決nginx php上傳大檔案的問題 用nginx來做webserver的時,上傳大檔案時需要特別注意client max body size這個引數,否則會中斷在nginx的請求中,在php中是無法記錄到訪問的.一般上傳大檔案流程 首先...