PHP有限記憶體處理大檔案(從兩個檔案提取相同行)

2021-10-07 21:49:10 字數 636 閱讀 8731

有兩個檔案檔案,大小都超過了1g,一行一條資料,每行資料不超過500位元組,兩檔案中有一部分內容是完全相同的,請寫**找到相同的行,並寫到新檔案中。php最大允許內內為256m。

遇到此問題,首先先嘗試從小範圍解決,比如題目中,要求查詢兩個檔案相同的行,那麼我們可以先讀取檔案到記憶體中(陣列),然後通過array_intersect()函式獲取兩個陣列的交集,即為相同的行,此時,小範圍的問題已經找到解決方法了。

再回到問題本身,兩個檔案都超過1g,php最大使用記憶體是256m(也有可能是128m,甚至10m,這不用擔心),在此條件下,直接讀取檔案到記憶體,顯然不可行,我們可以考慮使用split命令將其分割成若干個小檔案,再運用上面的思路逐個對比小檔案,得到的結果,再合併到結果集裡面,然後再去重,即得到題目要求。

<?php

function build_file($max)

{ $file1 = fopen("/tmp/file1.txt", "w");

$file2 = fopen("/tmp/file2.txt", "w");

for($i =0; $i < $max; $i++) {

$text1 = md5(microtime() . rand(100, 999))

PHP內建的兩個錯誤處理函式

set error handler 函式設定使用者自定義的錯誤處理函式。該函式用於建立執行時期間的使用者自己的錯誤處理方法。該函式會返回舊的錯誤處理程式,若失敗,則返回 null。set error handler error function,error types 引數 描述error func...

Linux處理求兩個檔案交集 差集

兩個檔案,如 root localhost grep cat 1.txtab cadaa bbaa root localhost grep cat 2 txtab cbbfsx分析,檔案1.txt和檔案2.txt 1.txt 2.txt a d aa aa 2.txt 1.txt fsx1.txt ...

PHP兩個檔案的相對路徑

1 2 relativepath 計算兩個檔案的相對路徑 3 param file1 參作為考路徑 4 param file2 相對於 file1的路徑5 6function relativepath file1,file2 18 19 path implode adifftob 20 implod...