V adresari "lastlog" mam 5 souboru: A.dat, B.dat, C.dat, D.dat a E.dat. V kazdem z techto souboru je ulozen retezec o 14 Bajtech: datum vytvoreni ve formatu RRRRDDMMhhmmss - takze kdybych pouzil na tyto retezce rsort(), zarucene by byly serazeny od nejnovejsiho po nejstarsi.
Potreboval bych skript, ktery includuje soubory ze slozky "lastlog" v serazeni od nejnovejsiho po nejstarsi. Datum, podle ktereho se zjistuje stari souboru, je ulozeno prave v tom souboru.
Tento skript mi pouze vypise soubory v inverznim abecednim poradku (Z - A).
<?
$adresar = opendir('./lastlog');
while ($soubor1 = readdir($adresar))
$soubory[] = $soubor1;
rsort($soubory);
for($i=0;$i<count($soubory)-2;$i++):
include($soubory[$i])
endfor;
closedir($adresar);
?>
Poznamka: tohle se vam zda mozna jako blbost, ve skutecnosti je to neco jineho, tady jsem to akorat hodne zjednodusil, aby me kazdy pochopil. Dekuji za rady :)
Mas namysli neco takoveho (neni to odzkousene)?
<?php
$dir = "./lastlog/";
$handle = opendir($dir); // otevre adresar
while ($file = readdir ($handle))
if(is_file($dir.$file)) // provede, pokud $file je soubor
{
$fp = fopen($dir.$file,"r"); // otevre soubor
$data = fread($fp,14); // nacte timestamp
fclose($fp); // zavre
$list["$file"]=$data; // ulozi do pole, pr.: $list['C.dat'] = 20050109153859
}
arsort($list); // seradi vysledne pole (hodnoty) sestupne se zachovanim klicu
while (list ($fn, $fd) = each ($list)) // prochazi pole
{ // (ty zavorky tu byt musi)
include($dir.$fn); // a includuje soubory podle obsahu klice.
}
?>
Hele nechci Vam do toho skakat kdyz se tak pekne snazite ale rikaji vam neco fce
FILECTIME a FILEMTIME ? imho si toho dost zjednodusite
možná se to nebude nehodit, ale třeba někomu jinému,
v souborech by ani nemusl být datum, ale rovnou by šlo pracovat s časem poslední úpravy dokumentu - filemtime():
<?php
foreach (glob("lastlog/*.txt") as $file) {
$list["$file"]=filemtime($file);
}
arsort($list);
while (list ($fn, $fd) = each ($list)) {
echo "<p>".date("j.n.Y G:i:s", $fd)."<br />\n";
include($fn);
echo "</p>\n";
}
?>
Havel> proc prochazis pole konstrukci WHILE , LIST a EACH? ma to nakou vyhodu proti nojvesimu a snadnesjimu zapisu FOREACH?
to je původní řešení, já se zabýval polem glob, resp. fcí filemtime
... aniž jsem si všimnul, že jsi byl rychlejší :-)
když to mají dostat celé, tak:
<?php
foreach (glob("lastlog/*.dat") as $file) {
$list["$file"]=filemtime($file);
}
arsort($list);
foreach ($list as $fn => $fd) {
echo "<p>".date("j.n.Y G:i:s", $fd)."<br />\n";
echo nl2br(file_get_contents($fn))."</p>\n";
}
?>