如何使用php7读取任何文件类型?

cld4siwp  于 2023-04-10  发布在  PHP
关注(0)|答案(2)|浏览(125)

我试图从我的服务器中提取用户的电子邮件地址。但问题是最大的文件是.txt,但有些是CSV文件与txt扩展名。当我试图读取和提取,我无法读取CSV文件与TXT扩展名。下面是我的代码:

<?php
$handle = fopen('2.txt', "r");
while(!feof($handle)) {
        $string = fgets($handle);
   $pattern = '/[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}/i';
   preg_match_all($pattern, $string, $matches);
   foreach($matches[0] as $match)
{
echo $match;
echo '<br><br>';
}
}
?>

我尝试使用此代码。该程序正在阅读完整的CSV文件,并逐行读取文本文件。有数千个文件,因此很难识别。
请建议我该怎么做来解决我的问题?有没有什么解决方案可以读取任何格式,那么它将是可怕的。

w3nuxt5m

w3nuxt5m1#

好吧,你的文件是不同的。因此,你将不得不采取不同的方法,为每一个。在更一般的术语,这通常是所谓的适应,主要是使用Adapter design pattern提供。
如果你使用适配器设计模式,你将有一个代码检查要打开的文件的扩展名,并有一个switch,其中有txtcsv。根据值,你将分别检索TxtParserCsvParser
然而,在深入研究这个领域之前,你可能想先看看文件。我不能在没有看到结构的情况下肯定地说这一点,但你可以。如果文本和csv文件的内容相同,那么一个非常简单的方法是将所有文件的扩展名更改为txt或csv,然后使用相同的逻辑处理它们,已知具有相同扩展名的文件现在将以相同的方式被处理。
但是从我理解的文件结构实际上是不同的,所以为了保持你的代码简洁,适配器模式,有两个单独的类/函数用于解析,另一个在上面用于选择正确的解析函数(这个顶部函数实际上是strategy的形式)并运行它。
无论哪种方式,我非常怀疑,所以有一个解决方案的问题,你所面临的文件结构主要是你和你自己的。

x0fgdtte

x0fgdtte2#

好的,所以问题是当CSV文件有太长的字符串行。基于这个限制,我建议你使用php.net的例子这里是一个例子:

$handle = @fopen("/tmp/inputfile.txt", "r");

if ($handle) {
    while (($buffer = fgets($handle, 4096)) !== false) {
        echo $buffer;
        // do your operation for searching here
    }
    if (!feof($handle)) {
        echo "Error: unexpected fgets() fail\n";
    }
    fclose($handle);
}

相关问题