Php 显示多个文本文件的内容

Php 显示多个文本文件的内容,php,Php,我有许多文本文件保存在目录中 /results/... 所有文本文件都使用unixtime戳记命名,以下每个文件中都有: #text¬test¬test1¬test2¬test3¬test4¬1262384177 每段文字用“,”分隔 然后,我想将文本文件的内容输入到一个数组中并输出它,例如在一个表中,但是对于每个文件(可能是循环?) 如果您有此功能,但它仅适用于一个文件和固定的文件名: $filename = "results/unixtime.txt"; $handle = fopen(

我有许多文本文件保存在目录中

/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>";
$filename=“results/unixtime.txt”;
$handle=fopen($filename,“r”);
$contents=fread($handle,filesize($filename));
fclose($handle);
$array01=分解(“,”,$contents);
$count=计数($array01);
回声“;
$i=0;

对于($i=0;$i),您可以通过获取位于“结果”中的所有文件

还有一个例子

<?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);
    }
}
?>

有几件事:


  • 除非你处理的是非常大的文件,你只需要加载文件就可以了
  • 使用
    foreach
    在数组上循环,除非您明确需要循环计数器。循环条件/计数器只是另一个可以产生简单错误的区域
  • 使用、和读取目录内容;以及
  • 目录将包含“.”和“.”等条目。请使用和/或检查名称和/或扩展名,将其限制为您感兴趣的文件
  • 例如:

    $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);
    
    $directory=“results/”;
    $dir=opendir($directory);
    while(($file=readdir($dir))!==false){
    $filename=$directory.$file;
    $type=filetype($filename);
    如果($type=='file'){
    $contents=file\u get\u contents($filename);
    $items=分解(“,”,$contents);
    回声';
    foreach($items作为$item){
    回显“$item\n”;
    }
    回声';
    }
    }
    closedir($dir);
    
    我建议使用相当未知的方法来检测您的所有文件。然后,将所有文件名放在一个方便的数组中,只需迭代并打开/读取每个文件。类似如下:

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

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

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

    来源:

    这是一种更优雅的书写方式,也可以使用
    文件获取内容
    而不是
    fopen
    fread
    fclose
    ,它更快,更不冗长。

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

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

    foreach (scandir(DOCROOT.'css') as $dir) {
                        echo $dir . "<br>";
                        echo file_get_contents(DOCROOT . 'css/' . $dir ) . "<hr />";
                    }
    
    foreach(scandir(DOCROOT.css')作为$dir){
    echo$dir.“
    ”; 回显文件获取内容(DOCROOT.css/.$dir)。“
    ”; }
    实际问题是什么?我的意思是..你自己回答了,是的,在文件列表上做一个循环。谢谢分享。我以后会使用:)“除非你处理非常大的文件,只要使用
    file\u get\u contents()
    …”-
    file\u get\u contents()
    有$offset和$maxlen参数,根据手册,“是将文件内容读入字符串的首选方法。如果操作系统支持,它将使用内存映射技术来提高性能。”。有没有理由不在大文件中使用它?@Alex:TBH我从来没有在PHP中处理过足够大(比如说超过20MB)的文件,以至于我一直担心文件内容()对内存的影响。