【问题标题】:php sorted array and readfile not reading in orderphp排序的数组和readfile没有按顺序读取
【发布时间】:2010-11-05 20:13:45
【问题描述】:

我正在尝试编写一个 php 函数来保存然后在文章上显示 cmets。

在我的 save.php 中,我正在制定文件: $file = "article1/comments/file".time().".txt";

然后使用 fwrite() 写入目录。

在我的索引中我有:

if ($handle = opendir('article1/cmets')) { while (false !== ($file = readdir($handle))) { if ($file != "." && $file != "..") { $files = 数组($file); 排序($文件); foreach($files 作为 $cmets){ echo "
"; readfile('article1/cmets/'.$cmets); 回声“&lt/div>”; } } } 关闭($句柄); }

在大多数情况下,这会以正确的顺序显示 cmets,但由于某种原因,某些文件显示不正确。此外,如果我将 sort() 更改为 rsort(),它们的显示方式没有变化。

我认为这是因为 readfile() 没有遵循排序数组的顺序。所以我想知道一个,为什么 readfile 不按从最新到最旧的顺序显示文件,第二个,我怎样才能让它正确显示它们?

谢谢。

编辑:我将 cmets 的目录从 live 站点复制到本地 xampp 安装,并且 cmets 在本地按顺序显示,但是在我的站点上使用相同的代码导致 cmets 不按顺序。

【问题讨论】:

  • 你在排序什么? $files 数组中只会有一个元素,所以排序是无用的......如果你想要排序,你需要将 $file 添加到 $files 数组 ($files[] = $file),然后移动foreach 循环和sortwhile 循环之外...
  • @ircmaxell:这是有道理的。我对php很陌生,所以我不太确定如何做所有这些。我正在尝试创建一个包含目录中所有文件的数组,然后使用 readfile 根据文件名按顺序显示每个文件的内容。
  • 您确定不能使用任何类型的数据库吗?
  • @Col。弹片:我可以使用 SQL 数据库。那会是更好的方法吗?这是我的第一个 php 项目,所以我基本上是在进行过程中弄清楚
  • 它会好几千倍。在数据库中存储文章和 cmets 将是显而易见且广泛使用的解决方案。但是,您可以将文件用于学习目的。拥有基本的文件系统技能总是好的

标签: php


【解决方案1】:

看看DirectoryIterator,一定要检查1st comment的DirectoryIterator的isFile()方法,应该足以解决这个问题。

【讨论】:

    【解决方案2】:

    试试这个:

     $files = array();
    
    if ($handle = opendir('article1/comments')) {
      while (false !== ($file = readdir($handle))) {
        if ($file != "." && $file != "..") {
           $files[] = $file; //adding file to array
        }
      }
      closedir($handle);
    }
    //if array is not empty-check (can go here)
    if(count($files)>0) { 
    
     sort($files);
    
     foreach($files as $comments){
            echo "<div class='message'>";
            readfile('article1/comments'.$comments);
            echo "</div>";
          }//~foreach
    }//~if
    

    【讨论】:

    • 行得通!但是,它会在每个文件的输出上方添加 "string(18) "file1288655842.txt" ",
    • 如果你使用上面的代码,一定要移动 sort($files); foreach() 上方的一行。它会便宜很多:)
    • 原来如此。为什么只做“微小”的改变?为什么不纠正明显的错误?
    • 够了...我会做出改变的 :)
    • @Col。 Shrapnel:我使用了 glob,效果很好,谢谢。 ---我不确定如何在此处将您的评论标记为解决方案,但是
    【解决方案3】:

    请为这些东西使用任何数据库!不要使用文件!这不是很安全并且性能低下

    【讨论】:

    • 数据库在哪里存储它的数据?
    • 因您使用的数据库而异)除了 mysql(redis、memcache、mongo 等)之外,还有许多数据库。此外,mysql 在大多数情况下将索引存储在内存中,因此排序和过滤比简单的基于文件的数据库要快得多
    • 您的操作系统始终将文件系统索引存储在内存中。老实说,在一定程度上,文件在性能方面并没有那么糟糕。
    • 您能解释一下为什么文件天生不安全吗?当然,您可以安全地实现它们,但我认为您可以保护它们而不是数据库,因为无需访问网络堆栈(因此减少了一个潜在的妥协点)。但是我很想知道它总体上是如何不那么安全和性能降低的(特别是考虑到数据库是建立在文件之上的)......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-06
    • 2013-03-18
    • 1970-01-01
    • 2021-11-10
    • 1970-01-01
    • 2015-04-29
    • 1970-01-01
    相关资源
    最近更新 更多