 |
| Hinweise |
Willkommen im TP-Hilfe-Forum!Dies ist ein Forum zu den Themen Photoshop, Dreamweaver, Flash, Selbständigkeit und mehr, in dem Du Hilfe, Anleitung oder eine Lösung zu Deinen Problemen erhältst. Aktuell bist Du in unseren Foren als Gast mit reinen Leserechten unterwegs. Wenn Du Dich registrierst, kannst Du eigene Themen verfassen, deine Frage stellen und privat mit anderen TPlern kommunizieren. Weitere Foren werden zugänglich, und Du wirst – falls gewünscht – per Mail über neue Beiträge informiert. Die Registrierung ist schnell und kostenlos. Sollten bei der Registrierung Fragen auftauchen, reicht ein Klick in unsere Hilfe - Häufig gestellte Fragen oder eine kurze Mitteilung an das Support-Team. Viel Spaß bei Traum-Projekt.com |
09.10.2004, 18:09
|
#1
|
|
TP-Member
Registriert seit: Feb 2004
|
Verzeichnis auslesen und Dateien nach Datum sortiert ausgeben
Hallo zusammen!
Ich sitze nun schon Stunden und komme nicht auf nen grünen Zweig  . Jetzt hoffe ich auf eure Hilfe. Also, ich möchte ein Verzeichnis mit den enthaltenden Dateien auslesen und diese Dateien nach Datum sortieren. Hier erst mal das Scritp, dass die Dateien ausliesst (das funzt):
PHP-Code:
<?
$handle=opendir ('../pdf/');
$path='../pdf/';
echo '<table width="500" border="0" cellspacing="0" cellpadding="0">';
echo '<tr class="normalfett">
<td width="265">Dateiname</td>
<td width="99">Dateigröße</td>
<td width="136">Datum/Uhrzeit</td>
</tr>
<tr class="normal">
<td> </td>
<td> </td>
<td> </td>
</tr>';
while (false !== ($file = readdir ($handle)))
{
if ($file=='.')
{
$file ='';
}
if ($file=='..')
{
$file ='';
}
if ($file<>'')
{
$aktuell=stat($path.$file);
$timestamp=$aktuell[9]; //enthält das Datum der letzten Modifizierung in Unixtime
$datum = date("d.m.Y",$timestamp);
$uhrzeit = date("H:i",$timestamp);
$size=number_format(filesize($path.$file)/1024);
echo '<tr class="normal">
<td><a href="'.$path.$file.'" target="_blank" >'.$file.'</a></td>
<td>'.$size.' KB</td>
<td>'.$datum.' / '.$uhrzeit.'</td>
</tr>';
}
}
closedir($handle);
echo '</table>';
?>
Um die Dateien zu sortieren, dachte ich nun, dass ich alle notwendigen Info in nem Array abspeicher und nach Datum sortiere. Aber irgendwie läuft anscheinend schon bei meiner Speicherung was falsch, weil mein Array immer leer ist  .
Ich habe das nun wie folgt umgeändert, aber es funzt leider nicht (die Sortierung hab ich noch gar nicht implementiert, weil ich erst mal den ersten Schritt bewerkstelligen muss - das Auslesen). Hat jemand nen Tipp für mich, wo mein Fehler ist? Hier das Script:
PHP-Code:
$dateianzahl=0;
$handle=opendir ('../pdf/');
$path='../pdf/';
echo '<table width="600" border="0" cellspacing="0" cellpadding="0">';
echo '<tr class="normalfett">
<td width="340">Dateiname</td>
<td width="100">Dateigröße</td>
<td width="160">Datum/Uhrzeit</td>
</tr>
<tr class="normal">
<td> </td>
<td> </td>
<td> </td>
</tr>';
//Anahl der Dateien im Verzeichnis ermitteln
while (false !== ($file = readdir ($handle)))
{
if ($file=='.')
{
$file ='';
}
if ($file=='..')
{
$file ='';
}
if ($file<>'') $dateianzahl=$dateianzahl+1;
}
$all_stat[]=array(); //leere Array
while (false !== ($file = readdir ($handle)))
{
for ($i=0; $i<$dateianzahl; $i++)
{
if ($file<>'')
{
$aktuell=stat($path.$file);
$timestamp=$aktuell[9]; //enthält das Datum der letzten Modifizierung in Unixtime
$size=number_format(filesize($path.$file)/1024); //Dateigröße
$dateiname=$file; //Dateiname
$all_stat[$i]=array_push ($all_stat, $path, $file, $timestamp, $size, $dateiname);
}
}
}
for ($i=0; $i<$dateianzahl; $i++)
{
$timestamp=$all_stat[$i][2];
$datum = date("d.m.Y",$timestamp);
$uhrzeit = date("H:i:s",$timestamp);
echo '<tr class="normal">
<td><a href="'.$all_stat[$i][0].$all_stat[$i][1].'" target="_blank" >'.$all_stat[$i][1].'</a></td>
<td>'.$all_stat[$i][2].' KB</td>
<td>'.$datum.' / '.$uhrzeit.'</td>
</tr>';
}
closedir($handle);
echo '</table>';
|
|
|
09.10.2004, 19:19
|
#2
|
|
TP-Member
Registriert seit: Feb 2004
|
Ich hab es nun hinbekommen mit dem Auslesen :-))), aber noch ein Problem mit dem sortieren. Hier mal das Script, welches jetzt für das Auslesen funktioniert:
PHP-Code:
$dateianzahl=0;
$handle=opendir ('../pdf/');
$path='../pdf/';
$all_stat=array(array()); //leere Array
echo '<table width="600" border="0" cellspacing="0" cellpadding="0">';
echo '<tr class="normalfett">
<td width="340">Dateiname</td>
<td width="100">Dateigröße</td>
<td width="160">Datum/Uhrzeit</td>
</tr>
<tr class="normal">
<td> </td>
<td> </td>
<td> </td>
</tr>';
//Anzahl der Dateien im Verzeichnis ermitteln
while (false !== ($file = readdir ($handle)))
{
if ($file=='.')
{
$file ='';
}
if (($file=='qtofm.php') || ($file=='foldericon.gif') || ($file=='fileicon.gif') || ($file=='arrowicon.gif'))
{
$file ='';
}
if ($file=='..')
{
$file ='';
}
if ($file<>'')
{
$dateianzahl=$dateianzahl+1;
$aktuell=stat($path.$file);
$timestamp=$aktuell[9]; //enthält das Datum der letzten Modifizierung in Unixtime
$size=number_format(filesize($path.$file)/1024); //Dateigröße
array_push ($all_stat,array($path, $file, $timestamp, $size)); //Dateiinfos zu Array hinzufügen
}
}
//Ausgabe der Dateinamen und Co.
for ($i=1; $i<=$dateianzahl; $i++)
{
$timestamp=$all_stat[$i][2];
$datum = date("d.m.Y",$timestamp);
$uhrzeit = date("H:i:s",$timestamp);
echo '<tr class="normal">
<td><a href="'.$all_stat[$i][0].$all_stat[$i][1].'" target="_blank" >'.$all_stat[$i][1].'</a></td>
<td>'.$all_stat[$i][3].' KB</td>
<td>'.$datum.' / '.$uhrzeit.'</td>
</tr>';
}
closedir($handle);
echo '</table>';
So, nun wollte ich noch nach Datum sortieren und mache es wie folgt:
PHP-Code:
//Datum aus $all_stat auslesen und in einem Array einlesen
for ($j=1; $j<=$dateianzahl; $j++)
{
$datum[]=$all_stat[$j][2];
}
//Datum sortieren
var_dump($datum);
echo '<br>';
$sort_datum=asort($datum);
var_dump($sort_datum);
var_dump($datum); gibt folgendes aus:
array(6) { [0]=> int(1092916446) [1]=> int(1092916574) [2]=> int(109515962  [3]=> int(109515962  [4]=> int(1092915074) [5]=> int(1096547054) }
Das ist , denke ich, ok? Nach der Sortierung erhalte ich mit var_dump($sort_datum); das:
bool(true)
Es sollte doch aber eine sortierte Liste erscheinen, oder??? Steig da nicht ganz durch. Hat jemand einen Tipp? Ich habe schon die verschiedenen Sortierfunktionen durch, also sort, asort, usort....
|
|
|
10.10.2004, 00:14
|
#3
|
|
TP-Member
Registriert seit: Feb 2004
|
Ist denn niemand unter euch, der dieses Problem auch schon mal hatte und mir helfen könnte???
Danke!
|
|
|
10.10.2004, 01:13
|
#4
|
|
TP-Insider
Registriert seit: May 2001
Ort: Wolfenbüttel
|
Schon recht spät... oder früh heute, um durch all den Code durchzusteigen. *gääähn
Ein Gedanke, den ich habe ist die sort(array,funktion)-Funktion, die es da bei PHP gibt AFAIK. Der konnte man ein zu sortierendes Array übergeben und eine Funktion, die eben zwei Elemente vergleicht und entsprechend zurückgibt.
Am Ende hat man ein sortiertes Array.
Denke, das wäre mal einen Blick wert.
Grüße
Holger
|
|
|
10.10.2004, 11:24
|
#5
|
|
TP-Member
Registriert seit: Feb 2004
|
Danke erst mal für Deine Hilfe! Mit der sort-Funktion habe ich auch schon versucht zu arbeiten, aber bin da nicht klar gekommen, weil ich ja ein zweidimensionales Array habe und da irgendwie Probleme hatte. Deshalb dachte ich, dass ich vielleicht mit usort besser dran bin, aber da will es irgendwie auch nicht funktionieren  .
Also wenn vielleicht jemand ein kleines Beispiel hat oder nen Code-Schnipsel oder was auch immer, ich wäre wirklich sehr dankbar!
Vielleicht liegt der Fehler ja schon in meinem Array ($all_stat) selbst, dass ich das falsch aufbaue???
Kathrin
|
|
|
10.10.2004, 13:54
|
#6
|
|
TP-Junior
Registriert seit: Jul 2004
|
usort() ist dein Freund. Da kannst du eine eigene Sortierfunktion angeben.
PHP-Code:
function mysort ($a, $b)
{
return $a[2] < $b[2];
}
usort($arr, "mysort");
Gruss
Wulfie
|
|
|
10.10.2004, 15:11
|
#7
|
|
TP-Member
Registriert seit: Feb 2004
|
Hey, Danke, das scheint zu funktionieren  . Allerdings erhalte ich noch folgende Meldung:
Notice: Undefined offset: 2 in C:\xampp\htdocs\HP2004\inhalt\auslesen.php on line 152
Und in Zeile 152 steht das:
return $a[2] < $b[2];
Ich habe Deinen Code so übernommen:
PHP-Code:
function mysort ($a, $b)
{
return $a[2] < $b[2];
}
usort($all_stat, "mysort");
Das bedeutet ja (glaube ich), dass ein Index nicht richtig übergeben wurde, besser gesagt, dass dieser nicht existiert, oder? Aber den gibts doch (2)???
Kathrin
|
|
|
10.10.2004, 15:39
|
#8
|
|
TP-Junior
Registriert seit: Jul 2004
|
Hallo Kathrin !
Ich habe jetzt mal alles aufgeräumt, und sauberer programmiert 
Leider musst du deine Formatierung halt noch einbauen (Tabellenaussehen)
PHP-Code:
$path = "../php";
$arr = array();
function sortdir ($a, $b)
{
return $a[1] < $b[1];
}
$dir = opendir($path);
while (($f = readdir($dir)) !== false)
{
if(substr($f,0,1) != "." && $f != "qtofm.php" && $f != "foldericon.gif" && $f != "arrowicon.gif")
{
$arr[] = array($f, filemtime($path."/".$f), filesize($path."/".$f));
}
}
closedir($dir);
usort($arr, "sortdir");
print "<table border='1' cellspacing='0' cellpadding='5'>";
foreach ($arr as $v)
print "<tr><td>$v[0]</td><td>".date("H:i:s d.m.Y", $v[1])."</td><td>$v[2]</td></tr>";
print "</table>";
Gruss
Wulfie
|
|
|
10.10.2004, 17:37
|
#9
|
|
TP-Member
Registriert seit: Feb 2004
|
Viiieeeelen Dank für Deine Mühe. Ich werde es heute Abend mal ausprobieren und Rückmeldung geben  .
Danke!
|
|
|
15.03.2006, 13:23
|
#10
|
|
TP-Newbie
Registriert seit: Mar 2006
|
Hallo, bin ein Anfänger in PHP, bin aber dabei es zu lernen. 
Ich habe dein Skript mal ausprobiert und rumexperimentiert, bekommen es aber nicht hin, das die Dateien nicht nur in einer Spalte sondern in meinetwegen 3 oder mehr angezeigt wird.
Die Spalten Größe und Datum habe ich schon gelöscht, da die nicht angezeigt werden sollen. Die neueste Datei soll dann als letztes in der Tabelle stehen.
Ich weiß das es nur was mit der Variablenzählung zu tun haben müsste, bekommen es aber nicht richtig hin. Hoffe du oder jemand anderes kann mir einen Tipp geben, thx
Geändert von hiphoprulez (15.03.2006 um 14:09 Uhr).
|
|
|
16.03.2006, 10:44
|
#11
|
|
TP-Newbie
Registriert seit: Mar 2006
|
Das mit den 3 Spalten hab ich nun selbst hingekriegt, habe wie ich schon gesagt hatte, eine neue Zählvariable eingebaut. Jetzt bräuchte ich nur noch jemanden der mir bei der Sortierung (sodass die neueste Datei als letztes in der Tabelle steht) hilft. hier ist der bisherige Code:
PHP-Code:
$dateianzahl=0;
$handle=opendir ('xy/');
$path='xy/';
$all_stat=array(array()); //leere Array
echo '<table width="80%" border="1" cellspacing="1" cellpadding="1">';
//Anzahl der Dateien im Verzeichnis ermitteln
while (false !== ($file = readdir ($handle)))
{
if ($file=='.')
{
$file ='';
}
if (($file=='qtofm.php') || ($file=='foldericon.gif') || ($file=='fileicon.gif') || ($file=='arrowicon.gif'))
{
$file ='';
}
if ($file=='..')
{
$file ='';
}
if ($file<>'')
{
$dateianzahl=$dateianzahl+1;
$aktuell=stat($path.$file);
$timestamp=$aktuell[9]; //enthält das Datum der letzten Modifizierung in Unixtime
$size=number_format(filesize($path.$file)/1024); //Dateigröße
array_push ($all_stat,array($path, $file, $timestamp, $size)); //Dateiinfos zu Array hinzufügen
}
}
//Ausgabe der Dateinamen und Co.
$x=0;
for ($i=1;$i<=$dateianzahl; $i++)
{
$timestamp=$all_stat[$i][2];
$datum = date("d.m.Y",$timestamp);
$uhrzeit = date("H:i:s",$timestamp);
if ($x>=3)
{
echo '<tr class="normal">';
}
echo '<td><a href="'.$all_stat[$i][0].$all_stat[$i][1].'" target="_blank" >'.$all_stat[$i][1].'</a> ('.$all_stat[$i][3].' KB)</td>';
$x++;
if ($x>=3)
{
echo '</tr>';
$x=0;
}
}
closedir($handle);
echo '</table>';
?>
Wäre sehr nett, wenn mir jemand hilft.
|
|
|
16.03.2006, 10:56
|
#12
|
|
TP-Moderator
Registriert seit: Nov 2005
Ort: Köln
|
Guck Dir mal array_multisort () an...
|
|
|
16.03.2006, 14:24
|
#13
|
|
TP-Newbie
Registriert seit: Mar 2006
|
Hab ich getan, bringt mich aber nicht so viel weiter, da die Beispiele die dort benutzt werden, sehr abstrakt sind und nicht wirklich verständlich.
Aber das mit den Arrays hat ja schon Wulfie benutzt und das kapier ich noch nicht ganz. Vielleicht find ich ja irgenwo plausiblere Beispiele als diese.
Das ganze ist halt schon für Fortgeschrittene und für Anfänger noch nicht so gut zu durschauen, trotzdem danke.
|
|
|
| |