| PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Post your PHP questions here! |
 |

26-05-2009, 15:42
|
|
jmd
Registrierter Benutzer
|
|
Registriert seit: May 2009
Beiträge: 8
|
|
html datei parsen mit ob_start()...
Hey,
ich wollte eine html-datei parsen, was mir dann auch irgendwie gelungen ist.
In der html-datei befinden sich 2 'variablen', welche mit einen in einem Array festgelegten string ersetzt werden sollen.
Beim ersten Versuch bin ich leider gescheitert, hier mal der code:
PHP-Code:
$stringArray = array("\$titel" => "Seitentitel", "\$test" => "Teststring"); function callback($buffer) { global $stringArray; foreach($stringArray as $key => $value): return str_replace($key, $value, $buffer); endforeach; } ob_start("callback"); echo implode("", file("./default/index.html")); ob_end_flush();
Hier wurde nur die erste Variable ersetzt, was wohl am return liegt, welches die foreach Schleife ja unterbricht. Hab dann auch versucht mit:
PHP-Code:
$buffer = str_replace($key, $value, $buffer);
Da blieb dann aber der Bildschirm weiß. Habs dann umgeschrieben und so hats dann funktioniert:
PHP-Code:
$stringArray = array("\$titel" => "Seitentitel", "\$test" => "Teststring"); ob_start(); include("./default/index.html"); $content = ob_get_contents(); ob_end_clean();
foreach($stringArray as $key => $value): $content = str_replace($key, $value, $content); endforeach; echo $content;
Jetzt würde mich nur noch interessieren was an der ersten Version falsch war, bzw ob das so überhaupt funktioniert hätte.
mfg jmd
|

26-05-2009, 15:52
|
|
hhcm
PHP Senior
|
|
Registriert seit: Jun 2005
Ort: Viersen, NRW
Beiträge: 1.820
|
|
Na ich weiss ja nicht, warum nicht file_get_contents und str_replace?
__________________
gruss Chris
Derjenige, der sagt: "Es geht nicht", soll den nicht stoeren, der's gerade tut."
|

26-05-2009, 15:54
|
|
combie
PHP Expert
|
|
Registriert seit: May 2006
Beiträge: 2.865
|
|
Weg damit:
PHP-Code:
ob_start();
include("./default/index.html");
$content = ob_get_contents();
ob_end_clean();
Ersetzen durch:
PHP-Code:
$content = file_get_contents("./default/index.html");
Und die Schleife kannst du durch die Verwendung der zweiten Version von strtr() auch noch eliminieren.
|

26-05-2009, 15:56
|
|
jmd
Registrierter Benutzer
|
|
Registriert seit: May 2009
Beiträge: 8
|
|
Ganz einfach, ich kannte die funktion bis jetzt gar nicht (bin anfänger)  .
Habs gerade versucht und funktionert auch ganz gut, und zudem ist es noch weniger zu schreiben ;P. Wie ist denn jetzt zum Vergleich der beiden methoden die bessere (von der performance her) ?
|

26-05-2009, 16:01
|
|
combie
PHP Expert
|
|
Registriert seit: May 2006
Beiträge: 2.865
|
|
Zitat:
|
Wie ist denn jetzt zum Vergleich der beiden methoden die bessere (von der performance her) ?
|
Probiers doch aus....
|

26-05-2009, 16:03
|
|
hhcm
PHP Senior
|
|
Registriert seit: Jun 2005
Ort: Viersen, NRW
Beiträge: 1.820
|
|
Ich rate einfach mal.. 10 Codezeilen Parsen, oder nur 1.. Hmm was wird da wohl performanter sein ..
__________________
gruss Chris
Derjenige, der sagt: "Es geht nicht", soll den nicht stoeren, der's gerade tut."
|

26-05-2009, 16:08
|
|
jmd
Registrierter Benutzer
|
|
Registriert seit: May 2009
Beiträge: 8
|
|
Nach meinen kleinen test eben ist die methode mit file_get_contents meistens um die 60-80% schneller
|

26-05-2009, 16:14
|
|
hhcm
PHP Senior
|
|
Registriert seit: Jun 2005
Ort: Viersen, NRW
Beiträge: 1.820
|
|
Nicht immer das Rad neu erfinden, eher mal in´s Manual gucken. Für so einfache sachen gibts meist eine fertige Funktion.
__________________
gruss Chris
Derjenige, der sagt: "Es geht nicht", soll den nicht stoeren, der's gerade tut."
|

26-05-2009, 16:45
|
|
jmd
Registrierter Benutzer
|
|
Registriert seit: May 2009
Beiträge: 8
|
|
OK das mit den 60-80% war ein wenig übertrieben, hab in einem Benchmark die funktionen 10 mal zu jeweils 1000 mal aufgerufen, und dabei ist file_get_contents um ca 30%-32% schneller, wer sich den code ansehen will kann das hier tun: nopaste.info - free nopaste script and service
|

26-05-2009, 17:20
|
|
combie
PHP Expert
|
|
Registriert seit: May 2006
Beiträge: 2.865
|
|
Zitat:
|
wer sich den code ansehen will kann das hier tun:
|
strtr() ist ja noch gar nicht eingebaut.....
Überlesen?
Oder egal?
|

26-05-2009, 17:43
|
wahsaga
 Moderator
|
|
Registriert seit: Sep 2001
Beiträge: 24.455
|
|
Zitat:
Zitat von jmd
Hier wurde nur die erste Variable ersetzt, was wohl am return liegt, welches die foreach Schleife ja unterbricht. Hab dann auch versucht mit:
PHP-Code:
$buffer = str_replace($key, $value, $buffer);
Da blieb dann aber der Bildschirm weiß.
|
Vermutlich, weil deine Callback-Funktion dann gar nichts mehr zurückgegeben hat ...?
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
|

26-05-2009, 20:08
|
|
jmd
Registrierter Benutzer
|
|
Registriert seit: May 2009
Beiträge: 8
|
|
Zitat:
|
Zitat von combie
strtr() ist ja noch gar nicht eingebaut.....
|
Ou, das hab ich wirklich Überlesen ^^ werds gleich mal ausprobiern.
Zitat:
|
Zitat von wahsaga
Vermutlich, weil deine Callback-Funktion dann gar nichts mehr zurückgegeben hat ...?
|
Jetzt wo du es erwähnst, das hab ich ganz vergessen  thx für den Hinweis.
|
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
|
| Themen-Optionen |
|
|
| Thema bewerten |
|
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
|
PHP News
|