php7 提取文字檔案中IP位址

2021-10-08 14:09:02 字數 2196 閱讀 9055

之所以提到這個功能,是因為要介紹一下php7相對於php5的效能提公升。在本次功能中需要呼叫匿名函式,而匿名函式的乙個主要問題就是使用$this來表示任意物件,在php5中使用bindto()方法來解決,在php7中使用call()方法來解決,方法的轉變同時顯示著php7效能的提公升。

下面直接看下功能吧!

思想:首先我們需要乙個php檔案處理類來提取檔案內容,為了可以對大資料檔案的提取,我們採用生成器yield來輸出每行資料,這時檔案處理類決定了是splfileobject類,這個類物件可以通過fgets()方法來獲取文字檔案的一行資料。對提取的資料使用正規表示式來獲取ip位址,最後輸出ip位址和重複的次數就可以了。

關鍵

ip位址正規表示式:』/((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]).)(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])/』,只需要將0-255分開處理即可

**:

access類來對文字檔案進行處理提取資料和匹配正規表示式

<?php 

/* * 接收日誌檔案讀取其中的ip位址

* */

;use

exception

;//php自帶的異常類,phpunit中也有異常處理類

usesplfileobject

;class

access

$this

->

log=

newsplfileobject

($filename

,'r');

//對檔案進行讀模式,產生乙個檔案處理物件

}//生成器逐行迭代該檔案

public

function

fileiteratorbyline()

return

$count;}

//匹配ip位址

public

function

getip

($line

)(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])/'

,$line

,$match);

119. 119 101

return

$match[0

]??'';}}

測試**

<?php 

//測試access類

define

('log_file'

,'../log/*access*.log');

require_once

__dir__

.'/../autoload/loader.php'

;\autoload\loader::

init

(__dir__

.'/../../');

//定義匿名函式處理ip位址,匿名函式繫結任何變數,bindto和call方法,call方法的效率提高20%-50%

$freq

=function

($line)}

;/*echo'';

print_r

($freq);

echo'';

*///閉包物件,closure object

最後提一下php7效能的提公升原因:

借鑑

php 讀取文字檔案內容

php讀取檔案內容的三種方法 第一種讀取方式 如下 header content type text html charset utf 8 告訴php預處理器將內容已utf8的格式傳遞給瀏覽器 檔案路徑 file path text.txt 判斷是否有這個檔案 if file exists file...

php 逐行讀取文字檔案

在讀取文字時,我們要注意乙個事情,那就是換行符,應為我們在寫文件時會手動換行,這個換行符需不需要儲存就要看自己的需求了。這裡封裝了兩個方法,乙個保留換行,乙個不保留。path為檔案路徑 檔名 1.不保留換行 1 function read path 11 fclose file 12 user ar...

PHP中對文字檔案操作很好的類

class ctbclass 新增資料記錄到檔案末端 function add write new 配合readfile 的返回一起使用,把一行資料轉換為一維陣列 function make array line 把為一維陣列轉換一行資料 function join array line 返回資料檔...