更好的方法吗? (在php中读取文件)

时间:2009-08-17 18:32:13

标签: php file

我只是想出了如何阅读一些文件,但我真的不喜欢它。

我有一些名为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++;
}

?>

谢谢!

8 个答案:

答案 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/