art-d-sign
-


Hinweise


Antwort
 
LinkBack Themen-Optionen Thema durchsuchen Thema bewerten
Alt 09.10.2004, 18:09   #1
TP-Member
 
Registriert seit: Feb 2004
kathrin-77 macht alles soweit korrekt

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>'
kathrin-77 ist offline   Mit Zitat antworten


Alt 09.10.2004, 19:19   #2
TP-Member
 
Registriert seit: Feb 2004
kathrin-77 macht alles soweit korrekt
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&ouml;&szlig;e</td>
    <td width="160">Datum/Uhrzeit</td>
  </tr>
  <tr class="normal">
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</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....
kathrin-77 ist offline   Mit Zitat antworten
Alt 10.10.2004, 00:14   #3
TP-Member
 
Registriert seit: Feb 2004
kathrin-77 macht alles soweit korrekt
Ist denn niemand unter euch, der dieses Problem auch schon mal hatte und mir helfen könnte???

Danke!
kathrin-77 ist offline   Mit Zitat antworten
Alt 10.10.2004, 01:13   #4
TP-Insider
 
Benutzerbild von wuselmann
 
Registriert seit: May 2001
Ort: Wolfenbüttel
wuselmann ist auf einem guten Weg
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
__________________
Wo kämen wir denn hin, wenn wir keine Träume mehr hätten? ™
shark-design Internet, Druck & Kommunikation in Wolfenbüttel
wuselmann ist offline   Mit Zitat antworten
Alt 10.10.2004, 11:24   #5
TP-Member
 
Registriert seit: Feb 2004
kathrin-77 macht alles soweit korrekt
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
kathrin-77 ist offline   Mit Zitat antworten
Alt 10.10.2004, 13:54   #6
TP-Junior
 
Registriert seit: Jul 2004
Wulfie macht alles soweit korrekt
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
Wulfie ist offline   Mit Zitat antworten
Alt 10.10.2004, 15:11   #7
TP-Member
 
Registriert seit: Feb 2004
kathrin-77 macht alles soweit korrekt
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
kathrin-77 ist offline   Mit Zitat antworten
Alt 10.10.2004, 15:39   #8
TP-Junior
 
Registriert seit: Jul 2004
Wulfie macht alles soweit korrekt
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($ffilemtime($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
Wulfie ist offline   Mit Zitat antworten
Alt 10.10.2004, 17:37   #9
TP-Member
 
Registriert seit: Feb 2004
kathrin-77 macht alles soweit korrekt
Viiieeeelen Dank für Deine Mühe. Ich werde es heute Abend mal ausprobieren und Rückmeldung geben .

Danke!
kathrin-77 ist offline   Mit Zitat antworten
Alt 15.03.2006, 13:23   #10
TP-Newbie
 
Registriert seit: Mar 2006
hiphoprulez macht alles soweit korrekt
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).
hiphoprulez ist offline   Mit Zitat antworten
Alt 16.03.2006, 10:44   #11
TP-Newbie
 
Registriert seit: Mar 2006
hiphoprulez macht alles soweit korrekt
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].'&nbsp;KB)</td>';
    
$x++;
    if (
$x>=3)
    {
    echo 
'</tr>';
    
$x=0;
    }
 }
closedir($handle);


echo 
'</table>';
?> 
Wäre sehr nett, wenn mir jemand hilft.
hiphoprulez ist offline   Mit Zitat antworten
Alt 16.03.2006, 10:56   #12
TP-Moderator
 
Benutzerbild von Cybergreek
 
Registriert seit: Nov 2005
Ort: Köln
Cybergreek ist ein richtiges Arbeitstier - DANKECybergreek ist ein richtiges Arbeitstier - DANKECybergreek ist ein richtiges Arbeitstier - DANKECybergreek ist ein richtiges Arbeitstier - DANKE
Guck Dir mal array_multisort () an...
__________________
Grüße vom Griechen,
Cybergreek!

WikiDict.de - Das Wiki-Wörterbuch
Cybergreek ist gerade online   Mit Zitat antworten
Alt 16.03.2006, 14:24   #13
TP-Newbie
 
Registriert seit: Mar 2006
hiphoprulez macht alles soweit korrekt
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.
hiphoprulez ist offline   Mit Zitat antworten