我只是想出了如何阅读一些文件,但我真的不喜欢它。
我有一些名为1.txt,2.txt,3.txt等文件。我需要阅读并打印最后两个文件。我找到了一种方法,但我希望看到其他一些方法。
我的方式:
<?php
$i = 1;
$x = 1;
while (file_exists('news/'.$i.'.txt')){
$i++;
}
$i--;
while ((file_exists('news/'.$i.'.txt')) && ($x <= 2)){
$data = file_get_contents('news/'.$i.'.txt');
echo $data;
$i--;
$x++;
}
?>
谢谢!
答案 0 :(得分:3)
它看起来是一种很好的方式,它有什么问题?
答案 1 :(得分:3)
或者,您可以将所有文件名加载到包含scandir()的数组中,然后只读取数组中提到的最后两个文件:
答案 2 :(得分:2)
如果您拥有新闻项的数据库记录会很方便,这样您就可以只查询数据库而不是从磁盘读取数据。但是,如果这不是一个选项,您可以考虑这样的事情:
$files = scandir('news/', 1);
for($i = 0; $i < 2; $i++) {
$data = file_get_contents($files[0]);
echo $data;
}
这使用PHP 5中的scandir函数。
答案 3 :(得分:1)
$files = glob('news/*.txt'); // This is assuming all *.txt files have numbers for the * part
$files = rsort($files);
for ($x = 0; $x < 2; $x++) {
readfile($files[$x]);
}
尽管如此,根据Jonathan Sampson的回答,你可以用scandir替换glob / rsort行。
你现在正在使用PHP5,是吗?
答案 4 :(得分:1)
<?PHP
$array = scandir($dir);
$num = count($array);
$data1 = file_get_contents($array[$num-2]); //almost last file
$data2 = file_get_contents($array[$num-1]); //last file
echo $data1, $data2;
?>
答案 5 :(得分:1)
scandir()方法可能存在问题:文件名按字典顺序排序,即1.txt,10.txt,11.txt,2.txt,20.txt,3.txt,。 ..
因此,如果您确实想要更改代码,我建议scandir() / glob()和natsort():
此函数实现一种排序算法,该算法按照人类维护键/值关联的方式对字母数字字符串进行排序。
$files = glob('news/*.txt');
natsort($files);
$files = array_slice($files, -2);
答案 6 :(得分:0)
我会这样做,我认为它更具可读性:
$allTextFiles = glob('news/*.txt');
$numericTextFiles = array_filter($allTextFiles, create_function('$file', 'return is_numeric(basename($file, ".txt"));'));
asort($numericTextFiles);
readfile(end($numericTextFiles));
readfile(prev($numericTextFiles));
答案 7 :(得分:0)
如果它们是目录中的唯一文件,则可以使用readdir读取目录中的所有文件:
http://www.howtogeek.com/howto/programming/php-display-a-customizeable-list-of-files-in-a-directory/