Antworten auf deine Fragen:
Neues Thema erstellen

Abfrage des Erstellungszeitpunktes einer Datei abfragen

Jimbim

Noch nicht viel geschrieben

Hallo!

Ich will mit jQuery eine Abfrage des Erstellungsdatums von Dateien erstellen und dann dementsprechend den Inhalt in ein div einfügen.

Bin mit jQuery noch nicht so vertraut.

Wäre super, wenn mir jemand helfen könnte!
 

Duddle

Posting-Frequenz: 14µHz

AW: Abfrage des Erstellungszeitpunktes einer Datei abfragen

jQuery basiert auf JavaScript. JavaScript darf im Allgemeinen nicht auf lokale Dateien zugreifen. Du musst dein Problem daher (wahrscheinlich) anders angehen.


Duddle
 

MegaAdi

Freak

AW: Abfrage des Erstellungszeitpunktes einer Datei abfragen

Serverseitige Abfrage über das Erstellungsdatum lässt sich ganz leicht mit PHP erledigen!
Stichwort ist dabei filectime(). Damit lässt sich die letzte Änderung der Datei ausgeben als UNIX-Timestamp.

Gruß Adrian
 

Jimbim

Noch nicht viel geschrieben

AW: Abfrage des Erstellungszeitpunktes einer Datei abfragen

Danke für die schnellen Antworten.

Mit PHP war des echt kein Problem. Ein bisschen rumprobiert und es hat funktioniert.

Jetzt ist es so, in einer Spalte, will ich jetzt kurze Auszüge aus den Dateien einfügen. Des ist an sich nicht des Problem, aber wie kann ich die nach dem Erstellungsdatum sortieren.

Es geht um 6 Dateien, die aktuellsten davon sollen in der Spalte angezeigt werden.
 

fakerer

Aktives Mitglied

AW: Abfrage des Erstellungszeitpunktes einer Datei abfragen

schreib die Daten einfach in ein Array und sortier das ganze nach Timestamp und anzeigen
 
M

MaedeG

Guest

AW: Abfrage des Erstellungszeitpunktes einer Datei abfragen

so wie es fakerer geschrieben hat, könnte man dies sehr einfach realisieren. Da du von Spalten sprichst, gehe ich davon aus, dass du eine DB verwenden möchtest. Eine mögliche Lösung wäre mittels SQL-Statement möglich, welches du in einem mysql-Query via PHP übergibst bsp:

PHP:
$sql = "SELECT `SpalteDatei` FROM `Datenbank`.`tblDatei` ORDER BY `SpalteDatum` ASC";
$query = mysql_query($sql);

while ($row = mysql_fetch_object($query )) {
  echo $row->SpalteDatei .'<br />';
}

Ich habe nicht gross auf die Syntax geachtet, also nicht wundern wenns auf Anhieb nicht direkt funzt.

Gruss, MaedeG
 
Zuletzt bearbeitet von einem Moderator:

Jimbim

Noch nicht viel geschrieben

AW: Abfrage des Erstellungszeitpunktes einer Datei abfragen

Also ich hab des jetzt mal mit dem Array versucht. Bin aber noch nicht all zu weit gekommen.

Wo liegt in meinem Script der oder warscheinlich liegen die Fehler. Ich hab die 6 Dateien ausgelesen und samt timestamp in ein Array gespeichert. Jetzt will alles nach dem Erstellungsdatum sortieren und wieder ausgeben.

Zum sortieren bin noch nicht mal gekommen. Aber wenn ich alles ausgeben will, dann kommt nur 6mal "Array" zum Vorschein. Wenn ich die Variablen einzeln auslese oder die Variablen in dem Array direkt ansprech klappt auch die Ausgabe.

PHP:
$A = file_get_contents('../HTML/content3_1.html');
$A_timestamp = filectime('../HTML/content3_1.html');
$B = file_get_contents("../HTML/content3_2.html");
$B_timestamp = filectime("../HTML/content3_2.html");
$C = file_get_contents("../HTML/content3_3.html");
$C_timestamp = filectime("../HTML/content3_3.html");
$D = file_get_contents("../HTML/content3_4.html");
$D_timestamp = filectime("../HTML/content3_4.html");
$E = file_get_contents("../HTML/content3_5.html");
$E_timestamp = filectime("../HTML/content3_5.html");
$F = file_get_contents("../HTML/content3_6.html");
$F_timestamp = filectime("../HTML/content3_6.html");


$sidebar = array(
	array($A, $A_timestamp),
	array($B, $B_timestamp),
	array($C, $C_timestamp),
	array($D, $D_timestamp),
	array($E, $E_timestamp),
	array($F, $F_timestamp),
	);

foreach($sidebar AS $name)
 {
 echo $name. '<br>';
 }
 

Duddle

Posting-Frequenz: 14µHz

AW: Abfrage des Erstellungszeitpunktes einer Datei abfragen

Naja, du speicherst ja auch Arrays in Arrays. Sieh es wie ein Paket, in dass du nebeneinander mehrere kleinere, gefüllte Pakete gelegt hast. Das foreach bedeutet dann "bitte zeig mir jedes Paket" - aber eben nicht den Inhalt.

PHP:
$sidebar = array(
    $A => $A_timestamp,
    $B => $B_timestamp,
    $C => $C_timestamp,
    $D => $D_timestamp,
    $E => $E_timestamp,
    $F => $F_timestamp
    ); 
asort($sidebar);

asort() sortiert nach dem Wert (in diesem Fall der Timestamp) und behält dabei die Assoziation zum Key bei. Falls es falsch herum sortiert ist, nutze arsort().

Edit: Schöner als deine Variante fände ich auch folgendes
PHP:
for($i = 1; $i <= 6; $i++) {
	$contents = file_get_contents("../HTML/content3_$i.html");
	$timestamp = filectime("../HTML/content3_$i.html");
	$sidebar[$contents] = $timestamp;
}

Das baut das gleiche Array auf, nur eben in 5 Zeilen statt 20, und es ist leichter erweiterbar.


Duddle
 
Zuletzt bearbeitet:

Jimbim

Noch nicht viel geschrieben

AW: Abfrage des Erstellungszeitpunktes einer Datei abfragen

Ok, hast recht, deine Funktion is wesentlich einfacher und mit Sicherheit einfacher zu erweitern.

Das Sortieren funktioniert auch.

Aber wenn ich des jetzt ausgeben will, gibt er mir immer nur den Timestamp aus.
Wie mach ich des, dass ich den Dateiinhalt bekomm?

Mein Code:

PHP:
for($i = 1; $i <= 6; $i++) {
    $contents = file_get_contents("../HTML/content3_$i.html");
    $timestamp = filectime("../HTML/content3_$i.html");
    $sidebar[$contents] = $timestamp;
} 

arsort($sidebar);


foreach($sidebar AS $name) 
 { 
 echo $name. '<br>'; 
 }
 

Jimbim

Noch nicht viel geschrieben

AW: Abfrage des Erstellungszeitpunktes einer Datei abfragen

Danke für eure schnelle Hilfe.

Jetzt funktionierts so, wie ich mir des vorgestellt hab.

Hier mein fertiger Code:

PHP:
for($i = 1; $i <= 6; $i++) {
	$contents = file_get_contents("../HTML/content3_$i.html");
	$timestamp = filectime("../HTML/content3_$i.html");
    $sidebar[$contents] = $timestamp;
} 

arsort($sidebar);

//print_r($sidebar);

foreach($sidebar AS $name => $contents ) 
 { 
 echo '<div class="sidebar_content">'. $name. '</div> <a>mehr --></a>'; 
 }
 

Jimbim

Noch nicht viel geschrieben

AW: Abfrage des Erstellungszeitpunktes einer Datei abfragen

Hallo nochmal!

Des anzeigen der Dateien in der richtigen Reihenfolge funktioniert ja jetzt.

Aber jetzt tritt für mich ein weiteres Problem auf.

Und zwar seht ihr ja in meinem Code, dass die Dateien von 3_1 - 3_6 nummeriert sind. Da die Dateien aber in immer in verschiedener Reihenfolge angezeigt werden, soll ja auch immer der Link des obersten Berichts (der aktuellste halt) zu dem jeweiligen kompletten Bericht führen.

Wie bekomm ich des hin, dass er mir die ID für "mehr -->" in meiner for each-Schleife passend mitgibt.

Mein Code:

PHP:
for($i = 1; $i <= 6; $i++) {
	$contents = file_get_contents("../HTML/content3_$i.html");
	$timestamp = filectime("../HTML/content3_$i.html");
        $sidebar[$contents] = $timestamp;	
} 

arsort($sidebar);

//print_r($sidebar);

foreach($sidebar AS $name => $contents ) 
 { 

 echo '<div class="sidebar_content">'. $name. '</div> <a id=????>mehr --></a>'; 
 }

Ich dachte mir, vielleicht kann ich da mit der Variablen $i aus der for-Schleife am Anfang arbeiten, hab dass aber nicht so wirklich hinbekommen aber vielleicht bin ich ja auf dem richtigen Weg!
 

Chriss1987

me.drinkCoffee();

AW: Abfrage des Erstellungszeitpunktes einer Datei abfragen

Hi,

du könntest eine Klasse definieren, in der du die benötigten Informationen speicherst. Eine Instanz der Klasse, also das Objekt speicherst du als Value im Array, zum Sortieren des Arrays speicherst du den Timestamp als Key. So brauchst du nicht ein Array in einem Array speichern oder so.

Hier mal ein kleines Beispiel:
PHP:
<?php

/// <summary>
/// Klasse 'Datei' definieren
/// </summary>
class Datei
{
    /// <summary>
    /// Timestamp der Datei
    /// </summary>
    var $timestamp;
    /// <summary>
    /// Dateiname
    /// </summary>
    var $dateiname;
    /// <summary>
    /// Inhalt der Datei
    /// </summary>
    var $content;
    
    /// <summary>
    /// initialisiert eine neue Instanz der Klasse 'Datei'
    /// </summary>
    /// <param name="t">Timestamp der Datei</param>
    /// <param name="n">Name der Datei</param>
    /// <param name="c">Inhalt der Datei</param>
    function Datei($t, $n, $c)
    {
        $this->timestamp = $t;
        $this->dateiname = $n;
        $this->content = $c;
    }
}

// --- Variable 'sidebar' initialisieren
$sidebar = array();

// --- alle Dateien mit Endung '.html' aus dem Ordner auslesen
foreach(glob('../HTML/*.html') AS $filename)
{
    // --- Timestamp bestimmen
    $timestamp = filectime($filename);
    // --- Dateiname bestimmen
    $dateiname = basename($filename);
    // --- Inhalt bestimmen
    $contents = file_get_contents($filename);
    
    // --- neue Instanz der Klasse 'Datei' erzeugen; Timestamp, Dateiname und Inhalt übergeben
    // --- Instanz der Klasse (Objekt) im Array speichern und Timestamp als Key nutzen
    // --- zuvor könnte man noch Prüfungen durchführen, z.B. ob im Dateinamen 'content' vorhanden ist
    $sidebar[$timestamp] = new Datei($timestamp, $dateiname, $contents);
}

// --- Array nach Key in absteigender Reihenfolge sortieren
krsort($sidebar);

// --- Array durchlaufen
foreach($sidebar AS $t => $file)
{
    // --- Key ausgeben (Timestamp)
    echo $t . '<br />';
    // --- gespeicherten Timestamp aus dem Objekt ausgeben
    echo $file->timestamp . '<br />';
    // --- gespeicherten Dateinamen aus dem Objekt ausgeben
    echo $file->dateiname . '<br />';
    // --- gespeicherten Inhalt aus dem Objekt ausgeben
    echo $file->content . '<br />';
}

?>

HTH
Schöne Grüße aus dem Sauerland!
Chriss
 

Jimbim

Noch nicht viel geschrieben

AW: Abfrage des Erstellungszeitpunktes einer Datei abfragen

Hi, danke erstmal für die schnelle Antwort.

Ich hab mir dein Script mal zu Gemüte geführt und für meine Zwecke abgeändert. Habs auch (denke ich zumindestens) so hinbekommen, dass des alles soweit funktioniert, wie ich mir des vorstelle.

Aber ich schaffs nicht, mein Array nach den Zeitstempel zu sortieren.

Kann mir bitte jemand sagen, wo der Fehler liegt:

PHP:
/// Klasse 'Datei' definieren
class Datei
{
   
    /// Timestamp der Datei
    var $timestamp;
    /// fortlaufende Dateibezeichnung (id)    
    //var $id;
	var $id;
    /// Inhalt der Datei
    var $content;
    /// initialisiert eine neue Instanz der Klasse 'Datei'
    /// <param name="t">Timestamp der Datei</param>
    /// <param name="n">fortlaufende Dateibezeichnung (id)</param>
    /// <param name="c">Inhalt der Datei</param>
    function Datei($t, $n, $c)  
    {
        $this->timestamp = $t;
        $this->id = $n;
        $this->content = $c;
    }
}

// --- Variable 'sidebar' initialisieren
$sidebar = array();

// --- alle Dateien mit Endung '.html' aus dem Ordner auslesen
for($i = 1; $i <= 6; $i++) {
    // --- Timestamp bestimmen
	$timestamp = filectime("../HTML/content3_$i.html");
    // --- id bestimmen
    $id = $i;
    // --- Inhalt bestimmen
    $contents = file_get_contents("../HTML/content3_$i.html");
    // --- neue Instanz der Klasse 'Datei' erzeugen; Timestamp, id und Inhalt übergeben
    // --- Instanz der Klasse (Objekt) im Array speichern und Timestamp als Key nutzen
    // --- zuvor könnte man noch Prüfungen durchführen, z.B. ob im Dateinamen 'content' vorhanden ist
    $sidebar[$timestamp] = new Datei($timestamp, $id, $contents);
}


	// --- Array nach Key in absteigender Reihenfolge sortieren
krsort($sidebar);

// --- Array durchlaufen
foreach($sidebar AS $t => $file)
{
    // --- Key ausgeben (Timestamp)
    //echo $t . '<br />';
    // --- gespeicherten Timestamp aus dem Objekt ausgeben
    //echo $file->timestamp . '<br />';
    
	echo $file->id . '<br />';
	
    // --- gespeicherten Inhalt aus dem Objekt ausgeben
   	echo '<div class="sidebar_content">'. $file->content. '</div> <a id="'. $file->id.'">mehr --></a>'; 
}

Danke schon mal im Voraus!
 

Duddle

Posting-Frequenz: 14µHz

AW: Abfrage des Erstellungszeitpunktes einer Datei abfragen

Einen Fehler sehe ich nicht direkt, nur ein Problem: wenn mehrere Timestamps gleich sind, wird die jeweilige Position im Array ersetzt. Deshalb hatte ich das auch oben nicht so gemacht.

Ist überhaupt eine Änderung nach dem krsort() erkennbar? Prinzipiell sollte es so funktionieren, wie du es machst.


Duddle
 

Jimbim

Noch nicht viel geschrieben

AW: Abfrage des Erstellungszeitpunktes einer Datei abfragen

Irgendwo muss aber ein Fehler sein.

Das Array wird alphabetisch sortiert und nich nach dem Zeitstempel.

Ich hab auch nochmal drüber geschaut, finde aber keinen Fehler!

Hilfe!!!!!
 

Chriss1987

me.drinkCoffee();

AW: Abfrage des Erstellungszeitpunktes einer Datei abfragen

Hi,

das Problem mit dem Überschreiben könnte man Q&D lösen, indem man die Sekunden des TS einfach so oft um 1 erhöht, bis der Key noch nicht im Array vorhanden ist. So wird zwar der Timestamp im Index verfälscht, jedoch hat man den ja noch original im Objekt, aussehen würde das ganze so:
PHP:
// --- alle Dateien mit Endung '.html' aus dem Ordner auslesen
foreach(glob('../HTML/*.html') AS $filename)
{
    // --- Timestamp bestimmen
    $timestamp = filectime($filename);
    // --- Dateiname bestimmen
    $dateiname = basename($filename);
    // --- Inhalt bestimmen
    $contents = file_get_contents($filename);
    
    // --- neue Instanz der Klasse 'Datei' erzeugen; Timestamp, Dateiname und Inhalt übergeben
    // --- Instanz der Klasse (Objekt) im Array speichern und Timestamp als Key nutzen
    // --- zuvor könnte man noch Prüfungen durchführen, z.B. ob im Dateinamen 'content' vorhanden ist
    if(stristr($dateiname, 'content3_') === false)
        continue;
    
    if(!isset($sidebar[$timestamp]))
    {
        $sidebar[$timestamp] = new Datei($timestamp, $dateiname, $contents);
    }
    else
    {
        $falscherTimestamp = $timestamp;
        while(isset($sidebar[$falscherTimestamp]))
        {
            $falscherTimestamp++;
        }
        $sidebar[$falscherTimestamp] = new Datei($timestamp, $dateiname, $contents);
    }
}

Gib doch mal dein Array vor und nach dem krsort aus und poste uns mal die Ergebnisse, mal sehen, was da passiert! ;)

Schöne Grüße aus dem Sauerland!
Chriss
 

Jimbim

Noch nicht viel geschrieben

AW: Abfrage des Erstellungszeitpunktes einer Datei abfragen

Also, ich hab jetzt deine Funktion nochmal kopiert und Schritt für Schritt umgebaut.

Jetzt haut alles so hin, wie ich mir des vorgestellt hab! Super cool!

Danke für eure Hilfe und eure Zeit.
 

Jimbim

Noch nicht viel geschrieben

AW: Abfrage des Erstellungszeitpunktes einer Datei abfragen

Hallo nochmal!

Eine Frage hab ich jetzt noch. Ich kann ja den Inhalt meines Arrays jetzt nach dem Erstellungsdatum sortiert ausgeben.

Wie bekomm ich aber nur den Inhalt der aktuellsten Datei?
 

Chriss1987

me.drinkCoffee();

AW: Abfrage des Erstellungszeitpunktes einer Datei abfragen

Hi,

wenn du das Array nach dem Erstellungsdatum sortierst, ist, je nach Sortierreihenfolge ja die aktuellste Datei entweder das erste oder letzte Element, also kannst du es mit
PHP:
...
echo $sidebar[0];
echo $sidebar[count($sidebar) - 1];
...

aufrufen! ;)

HTH
Schöne Grüße aus dem Sauerland!
Chriss

Edit: Upps... zuviel .NET im Kopf... ist ja kein null-basierter Array-Key, die Lösung wäre:
PHP:
reset($sidebar);
echo current($sidebar); // erstes Element
echo end($sidebar); // letztes Element
reset($sidebar); // wieder auf erstes Element setzen
 
Zuletzt bearbeitet:
Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Neueste Themen & Antworten

Flatrate für Tutorials, Assets, Vorlagen

Zurzeit aktive Besucher

Statistik des Forums

Themen
118.635
Beiträge
1.538.454
Mitglieder
67.558
Neuestes Mitglied
StarsMan
Oben