Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php排序数组和readfile未按顺序读取_Php - Fatal编程技术网

php排序数组和readfile未按顺序读取

php排序数组和readfile未按顺序读取,php,Php,我试图编写一个php函数来保存并显示文章的评论 在我的save.php中,我使用以下公式编制文件: $file=“article1/comments/file.time()。.txt” 然后使用fwrite()写入目录 在我的索引中,我有: if ($handle = opendir('article1/comments')) { while (false !== ($file = readdir($handle))) { if ($file != "." && $file != "

我试图编写一个php函数来保存并显示文章的评论

在我的save.php中,我使用以下公式编制文件:
$file=“article1/comments/file.time()。.txt”

然后使用fwrite()写入目录

在我的索引中,我有:

if ($handle = opendir('article1/comments')) { while (false !== ($file = readdir($handle))) { if ($file != "." && $file != "..") { $files = array($file); sort($files); foreach($files as $comments){ echo "<div class='message'>"; readfile('article1/comments/'.$comments); echo "</div>"; } } } closedir($handle); } 如果($handle=opendir('article1/comments')){ while(false!=($file=readdir($handle))){ 如果($file!=“&&&$file!=”){ $files=数组($file); 排序($文件); foreach($comments形式的文件){ 回声“; readfile(“第1条/评论/”.$comments); 回声“</div>”; } } } closedir($handle); } 在大多数情况下,这会以正确的顺序显示注释,但由于某些原因,某些文件的显示顺序不正确。此外,如果我将sort()更改为rsort(),则它们的显示方式不会发生变化

我认为这是因为readfile()没有遵循排序数组的顺序。所以我想知道一个问题,为什么readfile不按从最新到最旧的顺序显示文件,还有两个问题,我如何才能使它正确地显示它们

谢谢

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

尝试以下操作:

 $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
$files=array();
如果($handle=opendir('article1/comments')){
while(false!=($file=readdir($handle))){
如果($file!=“&&&$file!=”){
$files[]=$file;//将文件添加到数组
}
}
closedir($handle);
}
//如果数组不是空的,请检查(可以转到此处)
如果(计数($files)>0{
排序($文件);
foreach($comments形式的文件){
回声“;
readfile(“第1条/评论”。$评论);
回声“;
}//~foreach
}//~z~如果

看一看,确保检查DirectoryIterator的isFile()方法,它应该足以解决这个问题。

请使用任何数据库!不要使用文件!这不是真正安全的,而且性能很低

您在排序什么?
$files
数组中只有一个元素,因此排序是无用的。。。如果需要排序,则需要将
$file
添加到
$files
数组(
$files[]=$file
),并将
foreach
循环和
排序
移动到
之外,而
循环…@ircmaxell:这很有意义。我对php非常陌生,所以我不太确定如何做到这一切。我试图创建一个包含目录中所有文件的数组,然后使用readfile根据文件名按顺序显示每个文件的内容。你完全确定不能使用任何类型的数据库吗?@Col.Shrapnel:我可以使用SQL数据库。这样做会更好吗?这是我的第一个php项目,所以我基本上知道它会好上千倍。在数据库中同时存储文章和评论将是一个显而易见的、广泛使用的解决方案。但是,您可以将文件用于学习目的。拥有基本的文件系统技能总是很好的!它在每个文件的输出前面加上“string(18)”file1288655842.txt“,但是,如果使用上述代码,请确保移动排序($files);foreach()上方的一行。那会便宜得多:)你也是。为什么只做“小”改动?为什么不改正明显的错误呢?够了……我来做些修改:)@Col.Shrapnel:我用了glob,它工作得很好,谢谢---我不知道如何在这里把你的评论标记为解决方案,但是数据库在哪里存储数据?不同于你使用的数据库类型)除了mysql(redis、memcache、mongo等)之外,还有很多数据库。而且,在大多数情况下,mysql将索引存储在内存中,因此,排序和过滤比简单的基于文件的DBOS快得多。您的操作系统总是将文件系统索引存储在内存中。老实说,在某种程度上,文件的性能并没有那么差。你能解释一下为什么文件天生就不安全吗?当然,您可以安全地实现它们,但我认为您可以比数据库更安全地保护它们,因为不需要攻击网络堆栈(因此减少了一个潜在的危害点)。但我很想知道它的安全性和性能如何降低(特别是考虑到数据库是建立在文件之上的)。。。