Alles in einer Datei

September 2009

Kann man eine Website in eine einzige Datei packen?
Ja, man kann, Bilder und externes CSS inklusive.

Der Trick ist grundsätzlich ganz einfach: Man ruft dieselbe Datei mit einer bestimmten Angabe auf.

Folgende Datei heisst site.php:
<?php
if(isset($_GET['img']) & $_GET['img']==='fussball'){
  
header('Content-type: image/png'); // PNG-Grafik ausgeben
  
echo base64_decode('iVBORw0KGgoAAAANSUhEUgToAAADWCAYAAABBs04RABGT+usw'); // Das Bild an sich
  
exit;
}
?>

<!-- Bild anzeigen -->
<img src="site.php?img=fussball" alt="Fussball" />
Die eigentliche Seite und das Bild sind in derselben Datei site.php gespeichert.
Der Binär-Code des Bildes wurde in Base64 codiert, damit es keine Probleme mit der Verarbeitung gibt, da der Binär-Code nicht einfach per Copy&Paste eingefügt werden kann. Folglich muss die Grafik bei der Ausgabe wieder zurück codiert werden.
Um einen korrekten Base64-Code zu bekommen, sollte man die Grafik-Datei ohne Umwege konvertieren. Bei diesem Konverter ist ein direkter Upload möglich.

Nach demselben Grundprinzip lassen sich auch "externe" CSS- und JavaScript-Dateien erstellen:
<?php
if(isset($_GET['file']) & $_GET['file']==='css'){
  
header('Content-type: text/css'); // Stylesheet ausgeben
  
?>
  /* Der CSS-Code */
  body { font-size:11px; color:#007; }
  /* ... */
  <?php
  
exit;
}
?>

<head>
 <!-- CSS laden -->
 <link rel="stylesheet" href="site.php?file=css" type="text/css" />
</head>

Solche "ausgelagerte" Dateien wie Bilder, CSS oder JS müssen immer vor jeglicher Ausgabe eingefügt sein, da sonst unerwünschter Inhalt in die "externe" Datei gelangen kann, was bei Bildern fatal ist.

Tipp: Wenn Bilder nach obigem Prinzip nicht angezeigt werden oder "defekt" sind, liegt es mit grosser Wahrscheinlichkeit daran, dass die Datei nicht korrekt mit Base64 codiert wurde, bzw. der Base64-Code nicht korrekt ist, oder aber der PHP-Code hat Fehlermeldungen produziert.

Siehe auch:
 
PHP


Andere Einträge