php排序数组和readfile未按顺序读取
我试图编写一个php函数来保存并显示文章的评论 在我的save.php中,我使用以下公式编制文件: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 != "
$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快得多。您的操作系统总是将文件系统索引存储在内存中。老实说,在某种程度上,文件的性能并没有那么差。你能解释一下为什么文件天生就不安全吗?当然,您可以安全地实现它们,但我认为您可以比数据库更安全地保护它们,因为不需要攻击网络堆栈(因此减少了一个潜在的危害点)。但我很想知道它的安全性和性能如何降低(特别是考虑到数据库是建立在文件之上的)。。。