为了账号安全,请及时绑定邮箱和手机立即绑定

PHP 读取并连接多个远程文件

PHP 读取并连接多个远程文件

PHP
达令说 2023-12-15 15:15:16
我使用此代码读取多个远程文件:$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));  }我注意到输出内容被截断,就像只处理一个文件一样,但我需要的是连接三个文件来操作它们。我怎样才能实现这个目标?
查看完整描述

2 回答

?
喵喔喔

TA贡献1735条经验 获得超5个赞

$parsed 的范围仅限于 foreach 循环,因此 $output 仅包含循环最后一次迭代的结果。您应该在循环之前定义 $output,并将每次迭代的结果附加到其中。


<?php

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


function parseFilterLists($filters)

{

    // Define a buffer for the output

    $output = [];

    foreach ($filters as $filter)

    {

        $file   = file_get_contents($filter);

        $parsed = preg_replace('/!.*/', '', $file);

        $parsed = preg_replace('/\|\|([\w\d]+(?:\.[\w]+)+)(?:[\^\$=~].*)/', '*://*.$1/*', $parsed);


        // Get the output for the file we're working on in this iteration

        $currOutput = array_filter(explode("\n", $parsed), function ($url) {

            return preg_match('/^\*:\/\/\*\.[\w\d-]+\.[\w]+\/\*$/', $url);

        });


        // Append the output from the current file to the output buffer

        $output = array_merge($output, $currOutput);

    }


    // Return the unique results

    return array_unique($output);

}


查看完整回答
反对 回复 2023-12-15
?
慕码人8056858

TA贡献1803条经验 获得超6个赞

我想这会如你所愿


$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));

  }


查看完整回答
反对 回复 2023-12-15
  • 2 回答
  • 0 关注
  • 125 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信