[PHP] Jak wyświetlić zawartość pliku?


(Podeszwaaaaaa) #1

Witam!

Mam tutaj kod php który wyświetla zawartość plików w danym katalogu:

<?php

if ($pliczki = opendir('pliki')) {

    while (false !== ($nazw = readdir($pliczki))) {

        if ($nazw != "." && $nazw != "..") {

            echo file_get_contents("$nazw");

        }

    }

    closedir($pliczki);

}

?>

Mam z nim dwa problemy:

1.W katalogu mam pliki z datami w nazwach. Jak zrobić by wyświetlało tylko pierwsze pięć plików: (ułożone chronologicznie, od najmłodszego)

Na przykład:

26-09-2012-nazwajakas.txt

12-09-2012-nazwa.txt

24-08-2012-jakas.txt

18-07-2012-nazwapliku.txt

15-07-2012-nazywnictwo.txt

13-07-2012-pliki.txt

11-07-2012-tekstowe.txt

07-07-2012-baza.txt

03-07-2012-dane.txt

2.Jak zrobić by czytało pliki jedynie z rozszerzeniem *txt ?

Proszę o jakieś propozycje czego użyć.

Pozdrawiam!


(mozilla007) #2

Pliki przerobić w pętli w tablicę i potem porównać rozszerzenia. Po porównaniu, które zostawi same pliki txt można zabrać się za odczytanie ich.


(GediMaster) #3

Mogłeś pliki nazywać w ten sposób: YYYYMMDD-nazwa.txt byłoby łatwiej, ale wypróbuj ten kod:

if ($t = glob('pliki/*.txt'))

{

	$f = $c = array();

	$p = '/(\d{2})-(\d{2})-(\d{4})/';


	foreach ($t as $v)

	{

		if (preg_match($p, $v, $m))

		{

			$f[$m[3].$m[2].$m[1]] = $v;

		}

	}

	krsort($f);


	$j = count($t) > 5 ? 5 : count($t);


	$c = array_slice($f, 0, $j);


	foreach ($c as $txt)

	{

		echo PHP_EOL . file_get_contents($txt);

	}

}

[EDIT] Błędne wyrażenie regularne było


(Podeszwaaaaaa) #4

Nie za bardzo che działać i w dodatku nie wywala żadnego błędu. W sumie to mogę je przekonwertować do takiej postaci jak podałeś. Ważne żeby działało.


(GediMaster) #5

Pomyliłem się wyrażeniu regularnym. Mogłeś się domyśleć :D. Poprawiłem kod:

<?php


if ($t = glob('pliki/*.txt'))

{

	$files = array();


	$f = $c = array();

	$p = '/(\d{2})-(\d{2})-(\d{4})/';


	foreach ($t as $v)

	{

		if (preg_match($p, $v, $m))

		{

			$f[$m[3].$m[2].$m[1]] = $v;

		}

	}

	krsort($f);


	$j = count($t) > 5 ? 5 : count($t);


	$c = array_slice($f, 0, $j);


	foreach ($c as $txt)

	{

		$files[] = file_get_contents($txt);

	}


	echo join(PHP_EOL.PHP_EOL, $files);

}

?>

Tutaj masz przykład: http://freedots.home.pl/_testy/t504426/


(Podeszwaaaaaa) #6

Ooo dzięki, było mi to bardzo potrzebne no i fajnie że nie muszę konwertować tych plików.