显示多个文本文件的内容

时间:2010-01-01 22:25:30

标签: php

我在目录

中保存了许多文本文件
/results/...

所有文本文件都使用unixtime标记命名,在以下每个文件中都有:

#text¬test¬test1¬test2¬test3¬test4¬1262384177

每段文字都以'¬'分隔。

然后我想将文本文件的内容提供给一个数组并输出它,例如一个表,但是对于每个文件(也许是循环的?)

如果有,但只适用于一个文件和固定文件名:

$filename = "results/unixtime.txt";
$handle = fopen($filename, "r");
$contents = fread($handle, filesize($filename));
fclose($handle);

$array01 = explode("¬",$contents);
$count = count($array01);

echo "<table width = 500 border=1 cellpadding=4>";
$i=0;
for ($i=0;$i<$count;$i++) {
echo "<tr><td>";
echo $array01[$i];
echo "</td></tr>";
}
echo "</table>";

6 个答案:

答案 0 :(得分:3)

有几件事:

  1. 除非你正在处理非常大的文件,否则只需使用file_get_contents()来加载文件。它只是一行代码而不是三行代码,你不需要;
  2. 使用foreach循环遍历数组,除非您明确需要循环计数器。循环结构/计数器只是另一个可以产生简单错误的区域;
  3. 使用opendir()readdir()closedir()来阅读目录内容;和
  4. 目录将包含“。”之类的条目。和“......”。使用filetype()和/或检查名称和/或扩展程序,将其限制为您感兴趣的文件。
  5. 示例:

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

答案 1 :(得分:3)

我建议使用相当未知的glob function来检测所有文件。然后将所有文件名放在一个方便的数组中,只需迭代并打开/读取每个文件名。有点像这样:

$files = glob('*.txt');
while(list($i, $filename) = each($files)){
   //what you have now
}

答案 2 :(得分:2)

您可以通过opendir获取位于“结果”中的所有文件。

还有一个例子......

<?php
$dir = "/etc/php5/";

// Open a known directory, and proceed to read its contents
if (is_dir($dir)) {
    if ($dh = opendir($dir)) {
        while (($file = readdir($dh)) !== false) {
            echo "filename: $file : filetype: " . filetype($dir . $file) . "\n";
        }
        closedir($dh);
    }
}
?>

答案 3 :(得分:2)

抓取目录中的文件并读取每个文件名。

<?php 

if ($handle = opendir('.')) {
    while (false !== ($file = readdir($handle))) { 
        if ($file != "." && $file != "..") {
            $filename = $file;
            //your code
        }
    }
    closedir($handle);
}

?>

来源:http://php.net/manual/en/function.readdir.php

答案 4 :(得分:0)

这是一种更优雅的写作方式brianreavis solution,也使用file_get_contents代替fopenfreadfclose,它更快,不那么冗长。

foreach (glob('*.txt') as $filename)
{
    $contents = file_get_contents($filename);
}

答案 5 :(得分:0)

使用此代码,将DOCROOT替换为您要扫描的目录。

foreach (scandir(DOCROOT.'css') as $dir) {
                    echo $dir . "<br>";
                    echo file_get_contents(DOCROOT . 'css/' . $dir ) . "<hr />";
                }