contact me!

29 September 2008

HTML mit PHP parsen

Auf einigen Servern ist das parsen von HTML durch PHP abgeschaltet und lässt sich auch nicht per .htaccess aktivieren - entweder wurde der Handler anders benannt, oder der Betreiber hat andere Vorkehrungen getroffen.
Falls jedoch mod_rewrite aktiv ist, hat man mehrere Möglichkeiten, die Dateien trotzdem von PHP interpretieren zu lassen.
1. Man hat selbst Einfluss auf die Dateinamen. Mit einer einzigen Zeile in der .htaccess
RewriteRule ^(.*).html$ $1.php
wird bei jeglichem Aufruf einer html-Datei (meinedomain.de/index.html) intern die entsprechende php-Datei gewählt und nach dem Parsen an den Browser ausgeliefert. Dazu muss man natürlich die html-Dateien umbenennen, so dass sie auf .php enden.
2. Man hat keinen direkten Einfluss auf die Dateinamen (z.B. dadurch, dass der Blog auf dem eigenen Server veröffentlicht wird). Durch die Zeile
RewriteRule ^(.*)\.html$ parsemyhtml\.php\?parse=$1
wird jeglicher Aufruf an eine .html-Datei auf die Datei parsemyhtml.php umgelenkt. Dabei wird dieser .php-Datei der Pfad zu der zu parsenden .html-Datei als Parameter übergeben (ohne Endung). Im einfachsten Fall würde die Datei folgendes beinhalten:
<?php
$parse = $_GET["parse"];
$openhtml = $parse . ".html";
if (file_exists($openhtml)) {
include($openhtml);
} else {
header("HTTP/1.0 404 Not Found");
}
?>
Hierdurch wird der Inhalt der jeweiligen .html-Datei innerhalb einer .php-Datei eingefügt und somit auch vom PHP-Parser verarbeitet. Statt per Header auf 404 zu verweisen, könnte man auch auf die Startseite oder eine eigene 404-Statusseite weiterleiten ( header('Location: http://www.example.com/'); ) oder jeden beliebigen Inhalt präsentieren (z.B. das google 404-Widget, mit dem die Seite ungefähr so aussehen kann). Natürlich sollte man darauf achten, dass durch den Parameter nicht beliebige Dateien abgerufen werden können, die dem direkten Zugriff durch den Browser normalerweise nicht ausgesetzt sind.

Labels: ,

23 September 2008

Joomla und sh404sef: Fehlerhafte Kodierung der Inhalte

Bei dem Einsatz von sh404sef macht es Sinn, die Titel-Tags durch das Modul "shCustomTags" generieren, bzw. ersetzen zu lassen. Bei Aktivieren bin ich vorhin auf ein kleines Problem gestoßen, welches sich dann aber zum Glück lösen ließ.
Zunächst sollte das Modul als letztes auf der Seite aktiviert sein, so dass auch alles ersetzt wird, was ersetzt werden soll. Das ganze arbeitet mit PHPs preg_replace. Also habe ich im Template ganz unten
MosLoadModules('custom_tag', -1);

eingefügt (das kann auch ruhig hinter dem schließenden body-Tag sein). Die Position "custom_tag" muss man natürlich im Template-Manager noch anlegen - als letzte, am Besten. Dann stellt man bei dem Modul (auch in der Modul-Liste dafür sorgen, dass es ganz unten steht, hab ich gelesen - sollte aber eigentlich egal sein) ein, dass es eben an position "custom_tag" geladen wird.
Falls auf dem Server PHP 5 zum Einsatz kommt kann es passieren, dass beim Aufruf mit dem Firefox (andere Browser sagen gerne einfach gar nichts) folgende Meldung kommt:



Das passiert dann, wenn auch GZIP-Kompression aktiviert ist. Also muss man, um shCustomTags verwenden zu können (zumindest mit PHP 5) die GZIP-Kompression in den Globalen Einstellungen abschalten.
Den entscheidenden Hinweis habe ich in diesem Forum gefunden.

Labels: , ,