首页 > 解决方案 > 读取并加入多个远程文件 PHP

问题描述

我正在使用此代码读取多个远程文件:

$filters = [ "https://example.com/file.txt", "https://example.com/file1.txt", "https://example.com/file3.txt" ]

function parseFilterLists( $filters )
  {
    foreach( $filters as $filter ){
      $file =  file_get_contents( $filter );
      $parsed = preg_replace( '/!.*/', '', $file );
      $parsed = preg_replace( '/\|\|([\w\d]+(?:\.[\w]+)+)(?:[\^\$=~].*)/', '*://*.$1/*', $parsed ); 
    }
    $output = array_filter( explode( "\n", $parsed ), function($url){
      return preg_match('/^\*:\/\/\*\.[\w\d-]+\.[\w]+\/\*$/', $url);
    });
    return array_values(array_unique($output));
  }

我注意到输出内容被截断,就像只处理一个文件一样,但我需要加入这三个文件来操作它们。我怎样才能做到这一点?

标签: php

解决方案


我想这会如你所愿

$filters = [ 
  "https://example.com/file.txt", "https://example.com/file1.txt", "https://example.com/file3.txt"
];

function parseFilterLists( $filters )
  {
    $files = [];
    foreach( $filters as $filter ){
      $files[] = file_get_contents( $filter );
    }
    $parsed = preg_replace( '/!.*/', '', implode("\n", $files));
    $parsed = preg_replace( '/\|\|([\w\d]+(?:\.[\w]+)+)(?:[\^\$=~].*)/', '*://*.$1/*', $parsed); 
    $output = array_filter( explode( "\n", $parsed ), function($url){
      return preg_match('/^\*:\/\/\*\.[\w\d-]+\.[\w]+\/\*$/', $url);
    });
    return array_values(array_unique($output));
  }

推荐阅读