LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1632|回复: 6

如何读取某一个目录下的所有文本文件内容?

[复制链接]
发表于 2006-8-14 13:26:53 | 显示全部楼层 |阅读模式
比如:在 /articles/ 目录下有如下文件

a.txt 全文内容
北京私接境外电视可被追究刑事责任
昨天,市“扫黄打非”办公室、市境外卫星电视传播秩序专项整治工作领导小组办公室联合召开会议,部署本市将开展为期一个月的境外卫星电视传播秩序专项整治行动,对本市卫星电视接收设施生产、销售、安装等各环节进行重点治理。

b.txt 全文内容
宣示主权 韩首制标记“东海”和“独岛”的地图
据韩国联合通讯社报道,韩国建设交通部下属的国土地理情报院今天表示:“迎来光复61周年,与有关机关共同制作了过去一直由民间企业制作并出售的标记东海、独岛的韩文、英文世界地图。”
c.txt, d.txt, e.txt, zhang.txt, ak.txt 等等几十个文本文件...................

想要将该目录下所有文本文件的内容读取出来,输出为以下格式的文件。

新文件的内容:
北京私接境外电视可被追究刑事责任
昨天,市“扫黄打非”办公室、市境外卫星电视传播秩序专项整治工作领导小组办公室联合召开会议,部署本市将开展为期一个月的境外卫星电视传播秩序专项整治行动,对本市卫星电视接收设施生产、销售、安装等各环节进行重点治理。

宣示主权 韩首制标记“东海”和“独岛”的地图
据韩国联合通讯社报道,韩国建设交通部下属的国土地理情报院今天表示:“迎来光复61周年,与有关机关共同制作了过去一直由民间企业制作并出售的标记东海、独岛的韩文、英文世界地图。”

(其他文本文件的内容)...................

这段代码显示的格式有点问题,不知道为什么会多显示了一次 1.txt。
<?php
function viewdir($ddir)
{
$handle=opendir($ddir);
while ($file = readdir($handle))
{
$bdir=$ddir."/".$file;
if($file<>'.' && $file<>'..' )
  {
  $fp=file($ddir."/".$file);
  for($int_a=0;$int_a<count($fp);$int_a++){
  $info.=$fp[$int_a]."<br />\n";
  }
  print $info."<br />";
}
}
closedir($handle);
}
viewdir("articles");
?>
显示效果:
北京私接境外电视可被追究刑事责任

昨天,市“扫黄打非”办公室、市境外卫星电视传播秩序专项整治工作领导小组办公室联合召开会议,部署本市将开展为期一个月的境外卫星电视传播秩序专项整治行动,对本市卫星电视接收设施生产、销售、安装等各环节进行重点治理。

北京私接境外电视可被追究刑事责任

昨天,市“扫黄打非”办公室、市境外卫星电视传播秩序专项整治工作领导小组办公室联合召开会议,部署本市将开展为期一个月的境外卫星电视传播秩序专项整治行动,对本市卫星电视接收设施生产、销售、安装等各环节进行重点治理。
宣示主权 韩首制标记“东海”和“独岛”的地图

据韩国联合通讯社报道,韩国建设交通部下属的国土地理情报院今天表示:“迎来光复61周年,与有关机关共同制作了过去一直由民间企业制作并出售的标记东海、独岛的韩文、英文世界地图。”

请问:要怎么修改,才能显示正常?
发表于 2006-8-14 16:24:24 | 显示全部楼层
没理由阿,我觉得写得没问题啊。
应该去看看是不是有两个重复的a.txt a.txt在那个目录里面。
如果不是的话,那就在$fp=file($ddir."/".$file);后面打印print $fp,看看打印出来几次a.txt
检查一下打印出来的都是什么,我一般都是这样排错的。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-8-15 09:35:47 | 显示全部楼层
找到原因了,变量 info 的值没有清空,导致后面的循环info的值成了累加。

修正后的代码:
<?php
function viewdir($ddir)
{
$handle=opendir($ddir);
while ($file = readdir($handle))
{
$bdir=$ddir."/".$file;
if($file<>'.' && $file<>'..' )
{
$fp=file($ddir."/".$file);
//print $fp."<br>";

for($int_a=0;$int_a<count($fp);$int_a++){
$info.=$fp[$int_a]."<br>";
}
print $info."<br><br>";
$info="";
}

}
closedir($handle);
}
viewdir("news");
?>

现在又有一个问题:

如果想要按文件创建的时间顺序读取,怎么实现排序?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-8-15 10:10:10 | 显示全部楼层
问题:

如果在 /news/ 目录下有60个文本文件,如何实现,按文件创建时间读取文件的内容,每页显示5个文件的内容?

分页 和 排序 该怎么实现?
回复 支持 反对

使用道具 举报

发表于 2006-9-6 16:31:22 | 显示全部楼层
php5有相关的实现函数,它把目录的文件及文件信息读成array,但如果你用的是php4恐怕就只能先历遍一次目录读取文件名和创建时间到一个array,然后排序。
然后再历遍这个array,然后从头开始读取文件内容
回复 支持 反对

使用道具 举报

发表于 2006-9-6 16:32:06 | 显示全部楼层
文件少到没问题,文件多就会慢死掉。
楼主为什么不考虑用sql呢?
回复 支持 反对

使用道具 举报

发表于 2006-9-8 11:45:00 | 显示全部楼层
<?php
if ($handle = opendir('.')) {
    while (false !== ($file = readdir($handle))) {
        if ($file != "." && $file != "..") {
            echo "$file\n";
        }
    }
    closedir($handle);
}
?>

这时php手册里的一个例子,把echo "$file\n":改成 echo file_get_contents($file)."\n";就行了
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表