php und html |
Willkommen, Gast ( Anmelden | Registrierung )
php und html |
Gast_Bo Derek_* |
09.07.2003, 14:30
Beitrag
#1
|
Gäste |
Ich hab folgendes Problem:
ein php Script schreibt für jede hochgeladene Datei einen <a href-Eintrag mit abschliessendem br in eine htm Datei, es entsteht also eine Liste mit untereinander angeordneten Links zu den jeweilig hochgeladenen Dateien. Nun steht aber der neuste unten und wenn man zu diesem will und die Liste schon sehr lang ist, muss man zur neusten gaaaanz runterscrollen. Günstiger wäre es, wenn die neuste oben und die älteste unten steht. Gibt es eine Möglichkeit <a href Einträge in einer htm Datei in umgekehrter Reihenfolge abarbeiten zu lassen? Diese ist übrigens per SSI in eine andere HTML Datei eingebaut. Ich hoffe, das war nicht zu wirr |
|
|
Gast_pjan_* |
09.07.2003, 15:06
Beitrag
#2
|
Gäste |
Wirr nicht, aber helfen kann ich Dir leider nicht.
|
|
|
Gast_Andreas Haak_* |
09.07.2003, 15:40
Beitrag
#3
|
Gäste |
ZITAT(Bo Derek @ 9. July 2003, 15:29) Ich hab folgendes Problem: ein php Script schreibt für jede hochgeladene Datei einen <a href-Eintrag mit abschliessendem br in eine htm Datei, es entsteht also eine Liste mit untereinander angeordneten Links zu den jeweilig hochgeladenen Dateien. Nun steht aber der neuste unten und wenn man zu diesem will und die Liste schon sehr lang ist, muss man zur neusten gaaaanz runterscrollen. Günstiger wäre es, wenn die neuste oben und die älteste unten steht. Gibt es eine Möglichkeit <a href Einträge in einer htm Datei in umgekehrter Reihenfolge abarbeiten zu lassen? Diese ist übrigens per SSI in eine andere HTML Datei eingebaut. Ich hoffe, das war nicht zu wirr :rolleyes: Ich würde alle Namen in ein Array einlesen und dann das Array von hinten nach vorne durchgeben für die Ausgabe. Dadurch würden die Namen in umgekehrter Reihenfolge erscheinen. Anliegend auch mal eine fertige Routine :o). QUELLTEXT <?php $dirpath = "/testpath/"; $dir = opendir($dirpath); $files = array(); while (false !== ($file = readdir($dir))) { $localpath = $dirpath.$file; if (is_file($localpath)) { $key = filemtime($localpath).md5($file); $files[$key] = $file; } } ksort($files); foreach ($files as $file) { echo "<a href=\"$file\">$file</a>"; } Kurz zur Erklärung: Die Dateien werden in einem Array gespeichert. Als Identifier im Array dient die Erstellungszeit + MD5 des Dateinamens. MD5 deshalb, weil wenn 2 Dateien in der selben Sekunde erstellt wurden, würde es sonst Probleme geben. Danach wird das Array einfach sortiert. Die Sortierung müsstest Du nur anpassen. Weiß nicht mehr so genau ob es ab oder aufsteigend sein sollte (neueste files zuerst oder zuletzt) :o). |
|
|
Gast_skep_* |
09.07.2003, 16:01
Beitrag
#4
|
Gäste |
Mal ganz simples Beispiel...wenn du alle Links in eine Extra Datei schreibst und diese dann per SSI ect. in die HTML-Datei includest, kannst du es in etwa so machen:
QUELLTEXT <?php
// der neue Link $string = "<a href='blablabla'>2</a><br>\n"; // der bereits existierende Text $filename = "links.dat"; $fd = fopen ($filename, "r"); $content = fread ($fd, filesize ($filename)); fclose ($fd); // der neue Inhalt $content = $string.$content; // Schreiben des neuen Inhalts $fp = fopen ("links.dat", "w"); fwrite ($fp, $content); fclose ($fp); ?> |
|
|
Gast_Bo Derek_* |
09.07.2003, 16:01
Beitrag
#5
|
Threadersteller Gäste |
Au ja, Beispielcode wäre super :-)
|
|
|
Gast_Bo Derek_* |
09.07.2003, 16:11
Beitrag
#6
|
Threadersteller Gäste |
Ah, jetzt wird's unübersichtlich, deshalb werde ich noch etwas konkreter:
QUELLTEXT //save HTML for archive $datei = ""."$date".".htm"; $daten = fopen("$datei", "w+"); if (daten) { fputs ($daten, $newsletter); fclose ($daten); } Hier werden die in einem Eingabefeld eingegebenen Daten in eine Datei geschrieben, die den Dateinamen $date und die Dateinamenerweiterung .htm hat. QUELLTEXT //Link hinzufügen $datei = "links.htm"; $link = "<font face=\"Arial, Helvetica, sans-serif\" size=\"2\"><a href=\"$date.htm\" class=\"text\">$subject ... vom $datum</a></font><br>"; $daten = fopen("$datei", "a+"); if (daten) { fputs ($daten, $link); fclose ($daten); } Für die Datei wird nun in links.htm ein Hyperlinkeintrag erzeugt. |
|
|
Gast_Andreas Haak_* |
09.07.2003, 16:13
Beitrag
#7
|
Gäste |
Und Links.htm wird dann per SSI included?
|
|
|
Gast_Bo Derek_* |
09.07.2003, 16:19
Beitrag
#8
|
Threadersteller Gäste |
Ja, genau.
|
|
|
Gast_skep_* |
09.07.2003, 16:24
Beitrag
#9
|
Gäste |
Na dann würde doch der Code den ich gepostet hatte gehen....
|
|
|
Gast_Bo Derek_* |
09.07.2003, 16:27
Beitrag
#10
|
Threadersteller Gäste |
Blöd frag: muss ich dann aber nicht jeden Link einzeln per Hand übertragen?
|
|
|
Gast_skep_* |
09.07.2003, 16:31
Beitrag
#11
|
Gäste |
ZITAT(Bo Derek @ 9. July 2003, 17:26) Blöd frag: muss ich dann aber nicht jeden Link einzeln per Hand übertragen? Hmm...vielleicht hab ich ja jetzt ein Denkfehler...also: in der links.dat (aus meinem code) werden alle Links die nach und nach über das Eingabefeld hinzukommen hinzugefügt. Sprich, in der links.dat findest du dann alle Links (im HTML-Format). Oder was meinst du ? |
|
|
Gast_Andreas Haak_* |
09.07.2003, 16:33
Beitrag
#12
|
Gäste |
Dein Code:
QUELLTEXT //Link hinzufügen $datei = "links.htm"; $link = "<font face=\"Arial, Helvetica, sans-serif\" size=\"2\"><a href=\"$date.htm\" class=\"text\">$subject ... vom $datum</a></font><br>"; $daten = fopen("$datei", "a+"); if (daten) { fputs ($daten, $link); fclose ($daten); } Mein Code: QUELLTEXT //Link hinzufügen $datei = "links.htm"; $link = "<font face=\"Arial, Helvetica, sans-serif\" size=\"2\"><a href=\"$date.htm\" class=\"text\">$subject ... vom $datum</a></font><br>"; //Bisherige Links einlesen $daten = fopen("$datei", "r"); $content= fread($daten, filesize("$datei")); fclose($daten); //Neuen Link schreiben $daten = fopen("$datei", "w"); fputs ($daten, $link); //Alte Links hinten ran hängen fputs ($daten, $content); fclose ($daten); Der Link wird einfach immer als erstes eingetragen und dann erst der Rest *g*. Musst nur einmal deine Datei umsortieren ... . |
|
|
Gast_Bo Derek_* |
09.07.2003, 16:42
Beitrag
#13
|
Threadersteller Gäste |
ZITAT(skeptiker @ 9. July 2003, 17:30) in der links.dat (aus meinem code) werden alle Links die nach und nach über das Eingabefeld hinzukommen hinzugefügt. Sprich, in der links.dat findest du dann alle Links (im HTML-Format). Oder was meinst du ? Ja aber die stehen doch dann wieder in der falschen Reihenfolge, oder!? |
|
|
Gast_Bo Derek_* |
09.07.2003, 16:44
Beitrag
#14
|
Threadersteller Gäste |
ZITAT(Andreas Haak @ 9. July 2003, 17:32) Der Link wird einfach immer als erstes eingetragen und dann erst der Rest *g*. Musst nur einmal deine Datei umsortieren ... . DAS ist ja eine klasse Idee! Probiere ich nachher gleich mal aus - vielen Dank! |
|
|
Gast_Andreas Haak_* |
09.07.2003, 16:48
Beitrag
#15
|
Gäste |
ZITAT(Bo Derek @ 9. July 2003, 17:41) ZITAT(skeptiker @ 9. July 2003, 17:30) in der links.dat (aus meinem code) werden alle Links die nach und nach über das Eingabefeld hinzukommen hinzugefügt. Sprich, in der links.dat findest du dann alle Links (im HTML-Format). Oder was meinst du ? Ja aber die stehen doch dann wieder in der falschen Reihenfolge, oder!? Noch kurzer Hinweis ... fread performt nicht sonderlich gut. Besser performt file_get_contents - ist aber erst ab PHP 4.3 verfügbar. Du hattest ja nicht gesagt welche PHP Version daher bin ich mal von dem "niedrigsten" ausgegangen ;o). |
|
|
Gast_Bo Derek_* |
09.07.2003, 16:53
Beitrag
#16
|
Threadersteller Gäste |
4.1.2 ist schon vorhanden.
|
|
|
Gast_Andreas Haak_* |
09.07.2003, 17:07
Beitrag
#17
|
Gäste |
ZITAT(Bo Derek @ 9. July 2003, 17:52) 4.1.2 ist schon vorhanden. Gut - soll ich die Routine dann noch bisschen optimieren? |
|
|
Gast_Bo Derek_* |
09.07.2003, 18:30
Beitrag
#18
|
Threadersteller Gäste |
Das wäre wirklich klasse von Dir!
|
|
|
Gast_Andreas Haak_* |
09.07.2003, 19:20
Beitrag
#19
|
Gäste |
ZITAT(Bo Derek @ 9. July 2003, 19:29) Das wäre wirklich klasse von Dir! QUELLTEXT //Link hinzufügen $datei = "links.htm"; $link = "<font face=\"Arial, Helvetica, sans-serif\" size=\"2\"><a href=\"$date.htm\" class=\"text\">$subject ... vom $datum</a></font><br>"; //Bisherige Links einlesen $daten = fopen("$datei", "r"); while (!feof($daten)) { $content = $content.fread($daten, 4096); } fclose($daten); //Neuen Link schreiben $daten = fopen("$datei", "w"); fputs ($daten, $link); //Alte Links hinten ran hängen fputs ($daten, $content); fclose ($daten); So - das ist das schnellste :o). Die andere Methode hat Probleme mit sehr großen Dateien. Hat mitunter ca. 2 Minuten zum einlesen von 2048kb gebraucht. Die Methode jetzt braucht weniger als eine Sekunde ... . Sollte reichen. Noch schneller ist die Methode mit file_get_contents - aber erst ab PHP 4.3 :o). |
|
|
Gast_Bo Derek_* |
09.07.2003, 19:25
Beitrag
#20
|
Threadersteller Gäste |
Super! Vielen, vielen Dank!
|
|
|
Vereinfachte Darstellung | Aktuelles Datum: 26.06.2024, 22:41 |