Rokop Security

Willkommen, Gast ( Anmelden | Registrierung )

2 Seiten V   1 2 >  
Closed TopicStart new topic
> php und html
Gast_Bo Derek_*
Beitrag 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 rolleyes.gif
Go to the top of the page
 
+Quote Post
Gast_pjan_*
Beitrag 09.07.2003, 15:06
Beitrag #2






Gäste






Wirr nicht, aber helfen kann ich Dir leider nicht.
Go to the top of the page
 
+Quote Post
Gast_Andreas Haak_*
Beitrag 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).
Go to the top of the page
 
+Quote Post
Gast_skep_*
Beitrag 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);

?>
Go to the top of the page
 
+Quote Post
Gast_Bo Derek_*
Beitrag 09.07.2003, 16:01
Beitrag #5


Threadersteller




Gäste






Au ja, Beispielcode wäre super :-)
Go to the top of the page
 
+Quote Post
Gast_Bo Derek_*
Beitrag 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.
Go to the top of the page
 
+Quote Post
Gast_Andreas Haak_*
Beitrag 09.07.2003, 16:13
Beitrag #7






Gäste






Und Links.htm wird dann per SSI included?
Go to the top of the page
 
+Quote Post
Gast_Bo Derek_*
Beitrag 09.07.2003, 16:19
Beitrag #8


Threadersteller




Gäste






Ja, genau.
Go to the top of the page
 
+Quote Post
Gast_skep_*
Beitrag 09.07.2003, 16:24
Beitrag #9






Gäste






Na dann würde doch der Code den ich gepostet hatte gehen.... yes.gif
Go to the top of the page
 
+Quote Post
Gast_Bo Derek_*
Beitrag 09.07.2003, 16:27
Beitrag #10


Threadersteller




Gäste






Blöd frag: muss ich dann aber nicht jeden Link einzeln per Hand übertragen?
Go to the top of the page
 
+Quote Post
Gast_skep_*
Beitrag 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 ?
Go to the top of the page
 
+Quote Post
Gast_Andreas Haak_*
Beitrag 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 ... .
Go to the top of the page
 
+Quote Post
Gast_Bo Derek_*
Beitrag 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!?
Go to the top of the page
 
+Quote Post
Gast_Bo Derek_*
Beitrag 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!
Go to the top of the page
 
+Quote Post
Gast_Andreas Haak_*
Beitrag 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).
Go to the top of the page
 
+Quote Post
Gast_Bo Derek_*
Beitrag 09.07.2003, 16:53
Beitrag #16


Threadersteller




Gäste






4.1.2 ist schon vorhanden.
Go to the top of the page
 
+Quote Post
Gast_Andreas Haak_*
Beitrag 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?
Go to the top of the page
 
+Quote Post
Gast_Bo Derek_*
Beitrag 09.07.2003, 18:30
Beitrag #18


Threadersteller




Gäste






Das wäre wirklich klasse von Dir!
Go to the top of the page
 
+Quote Post
Gast_Andreas Haak_*
Beitrag 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).
Go to the top of the page
 
+Quote Post
Gast_Bo Derek_*
Beitrag 09.07.2003, 19:25
Beitrag #20


Threadersteller




Gäste






Super! Vielen, vielen Dank!
Go to the top of the page
 
+Quote Post

2 Seiten V   1 2 >
Closed TopicStart new topic
1 Besucher lesen dieses Thema (Gäste: 1 | Anonyme Besucher: 0)
0 Mitglieder:

 



Vereinfachte Darstellung Aktuelles Datum: 14.05.2024, 14:45
Impressum