在PHP中读取多个文本文件的内容并打印出特定的行

时间:2011-08-24 15:55:42

标签: php file text

我们有300多个txt文件,其中基本上是电子邮件的复制品,每个txt文件都有以下格式:

To: blabla@hotmail.com
Subject: blabla
From: bla1@hotmail.com
Message: Hello World!

目的是编写一个PHP脚本,该脚本遍历每个文件(都位于同一目录中),并在from字段中打印出每个“唯一”电子邮件地址的列表。这个概念非常简单。

有人能指出我在正确的方向吗?到目前为止,我已经设法让我的PHP脚本读取目录中所有文件的内容并输出结果:

<?php
$directory = "emails/";
$dir = opendir($directory);
while (($file = readdir($dir)) !== false) {
  $filename = $directory . $file;
  $type = filetype($filename);
  if ($type == 'file') {
     $contents = file_get_contents($filename);
     $items = explode('/n', $contents);
     echo '<table width="500" border="1" cellpadding="4">';
     foreach ($items as $item) {
       echo "<tr><td>$item</td></tr>\n";
     }
     echo '</table>';
  }
}
closedir($dir);
?>

所以现在,我需要能够阅读并打印每个文件的第3行。我假设它像在foreach循环中添加数组一样简单,以回显特定的行?我确实尝试过这个,但同时,它有点混乱:

<?php
$directory = "emails/";
$dir = opendir($directory);
**$lines = file($filename);**
while (($file = readdir($dir)) !== false) {
  $filename = $directory . $file;
  $type = filetype($filename);
  if ($type == 'file') {
     $contents = file_get_contents($filename);
     $items = explode('/n', $contents);
     echo '<table width="500" border="1" cellpadding="4">';
     foreach ($items as $item) {
       **echo "<tr><td>$lines[2]</td></tr>\n";**
     }
     echo '</table>';
  }
}
closedir($dir);
?>

有人能把我推向正确的方向吗?

1 个答案:

答案 0 :(得分:0)

使用命令行工具更容易:

exec("grep '^From: ' *.txt|uniq", $output);

只返回所有文本文件中以From:开头的行。一个简单的子字符串提取可以获得实际的电子邮件地址,并且您已经为自己节省了大量的PHP工作。