Unterschied PHP und HTML: zwei Werkzeuge, zwei Aufgaben
Lädst du eine Datei urlaub.html auf deinen Webspace, bekommt jeder Besucher genau diese Datei, Zeichen für Zeichen. Bei bildergalerie.php ist das anders: Der Besucher erhält nicht die Datei selbst, sondern das, was ein Programm in diesem Augenblick aus ihr erzeugt hat. Eine HTML-Datei ist also das fertige Ergebnis, eine PHP-Datei die Anleitung, nach der bei jedem Aufruf ein neues Ergebnis entsteht. Für deine eigene Fotogalerie wird daraus eine praktische Frage: Reicht eine Datei, oder brauchst du ein Programm?
Unterschied PHP und HTML: wer wann arbeitet
Am leichtesten behält man den Unterschied, wenn man fragt, wo und wann etwas passiert. PHP läuft auf dem Server, bevor die Seite verschickt wird. HTML ist das, was dann über die Leitung geht und was der Browser als Seite darstellt. Zwei weitere Sprachen gehören zu fast jeder Seite und werden oft mit den beiden verwechselt: CSS und JavaScript.
Sprache
Wo und wann
Beispiel aus der Galerie
PHP
auf dem Server, vor dem Versand
zählt die Fotos einer Kategorie und schreibt „4 Bilder“ unter die Kachel
HTML
wird verschickt, der Browser stellt es dar
Überschriften, Vorschaubilder, Links und der fertige Text „4 Bilder“
CSS
wird mitgeschickt, der Browser wendet es an
legt in css/layout.css fest, in welcher Schrift und Farbe „4 Bilder“ erscheint
JavaScript
im Browser, nach dem Laden
öffnet beim Klick auf ein Vorschaubild die große Ansicht über der Seite
HTML selbst rechnet nicht. Es hat keine Variablen und keine Bedingungen, deshalb nennt man es Auszeichnungssprache und keine Programmiersprache. CSS rechnet ebenso wenig, es bestimmt nur das Aussehen dessen, was im HTML steht. Die große Ansicht in der Galerie, die Lightbox, ist dagegen ein Programm in JavaScript aus der Datei js/lightbox.js. Diesen Code lädt der Browser mit herunter, jeder kann ihn lesen. PHP-Code verlässt den Server nie.
HTML hält fest, was gerade da ist
Stell dir eine Galerie vor, die du komplett von Hand in HTML schreibst. Für 40 Urlaubsfotos brauchst du 40 img-Elemente, jedes mit Dateiname, Ersatztext, Breite und Höhe. Dazu kommen 40 Vorschaubilder, die du vorher in einem Bildprogramm einzeln verkleinert hast. Das funktioniert und lädt schnell, weil der Server nichts rechnen muss.
Schwierig wird es beim 41. Foto. Du lädst foto41.jpg per FTP hoch, und es liegt nun im Ordner. Auf der Seite erscheint es trotzdem nicht, denn urlaub.html weiß nichts davon. Erst wenn du die Datei öffnest, eine Zeile ergänzt, ein Vorschaubild anlegst und aus „40 Bilder“ von Hand „41 Bilder“ machst, stimmt die Seite wieder. Vergisst du einen dieser Schritte, zeigt sie einen veralteten Stand.
PHP entscheidet, was da sein soll
PHP stellt Fragen, bevor die Seite entsteht: Wie viele Bilder hat diese Kategorie? Gibt es die verlangte Kategorie überhaupt? Die Antworten bestimmen, welches HTML am Ende herauskommt. Im Bildergalerie-Script siehst du solche Entscheidungen an drei Stellen:
Leere Kategorie: Statt einer leeren Seite schreibt PHP den Satz „In dieser Kategorie sind noch keine Bilder.“ und darunter einen Link zurück zur Übersicht.
Kategorie gelöscht: Ruft jemand ein altes Lesezeichen mit ?kid=9 auf und die Kategorie 9 gibt es nicht mehr, leitet PHP zur Startseite der Galerie weiter, statt eine Fehlerseite zu zeigen.
Einzahl oder Mehrzahl: Auf den Kacheln der Startseite steht „1 Bild“ oder „4 Bilder“, je nachdem, was PHP gezählt hat.
Eine reine HTML-Seite kann keinen dieser Fälle erkennen. Am 41. Foto wird der Unterschied greifbar. In der PHP-Galerie lädst du es in der Verwaltung hoch, und es wird zu einer zusätzlichen Zeile in der Datenbank. Die Datei bildergalerie.php bleibt dabei unverändert. Beim nächsten Aufruf fragt sie die Datenbank ab, zählt 41 und schreibt „41 Bilder“ ins HTML.
Auf dem Server liegt das neue Foto in beiden Fällen, doch nur bildergalerie.php fragt nach und schickt dem Browser „41 Bilder“.
Die neue Zahl erscheint sofort. Zwar hält die Galerie Antworten der Datenbank eine Weile im Ordner cache/ vor, doch jeder Upload in der Verwaltung leert diesen Zwischenspeicher.
Was im Code steht und was beim Besucher ankommt
Für die Zeile unter jeder Kachel enthält die Datei inc/functions.php drei mögliche Texte: „1 Bild“, die Zahl mit „Bilder“ und „Noch keine Bilder“. Welcher davon gilt, entscheidet PHP für jede Kategorie neu. Im Seitenquelltext der Startseite steht bei einer Kategorie mit vier Fotos dann nur noch <p class="kategorie_anzahl">4 Bilder</p>. Die beiden anderen Texte und die Bedingung, die zwischen ihnen wählt, sieht kein Besucher.
Ebenso wenig verrät die Endung in der Adresszeile, wie eine Seite entstanden ist. Diese Seite heißt unterschied-php-und-html.html, und trotzdem liegt auf dem Server keine Datei mit diesem Namen. Der Webserver reicht die Adresse an ein PHP-Programm weiter, das den Text bei jedem Aufruf aus der Datenbank holt. Im Browser kommt wie immer nur HTML an.
Für Entwickler: die Zeile aus inc/functions.php
Die Funktion für die Startseite lässt die Datenbank für jede Kategorie zählen und legt die Zahl in $bilderAnzahl ab. Leere Kategorien überspringt sie ab Werk vorher mit continue, sie bekommen dann gar keine Kachel. Erst wenn du unter „Einstellungen“ › „Startseite der Galerie“ die Option „Leere Kategorien anzeigen“ auf „Ja“ stellst, erreicht eine leere Kategorie diese Zeile:
Das Ergebnis in $anzahlText setzt PHP in das Element <p class="kategorie_anzahl"> unter der Kachel. Gestaltet wird die Zeile in css/layout.css über den Selektor p.kategorie_anzahl.
Woran du erkennst, ob dein Webspace PHP kann
Eine HTML-Galerie läuft auf jedem Speicherplatz, eine PHP-Galerie nur dort, wo der Server PHP ausführt. In üblichen Webhosting-Tarifen ist das enthalten, bei reinem Speicherplatz für Homepage-Baukästen oder bei manchen Gratisangeboten nicht. So findest du es heraus:
Schau in die Tarifbeschreibung oder ins Kundenmenü deines Webhosters. Kannst du dort eine PHP-Version auswählen, etwa 8.2 oder 8.3, läuft PHP.
Lege eine Datei phpinfo.php mit dem Inhalt <?php phpinfo(); an, lade sie hoch und rufe sie im Browser auf. Erscheint eine lange Tabelle mit der PHP-Version, ist alles bereit. Siehst du stattdessen den Code selbst, wird PHP nicht ausgeführt. Lösche die Datei danach, denn sie verrät viele Details über deinen Server.
Beim Bildergalerie-Script nimmt dir der Installer diese Arbeit ab. Seine Systemprüfung zeigt als ersten Punkt „PHP 8.2 oder neuer“ mit Häkchen oder Kreuz und darunter, was bei einem Kreuz zu tun ist.
Reine HTML-Galerie oder PHP-Galerie im Alltag
Im täglichen Betrieb einer eigenen Fotogalerie sehen die beiden Wege so aus:
Situation
Galerie aus reinem HTML
Galerie mit PHP
neues Foto
Datei von Hand ändern und hochladen
in der Verwaltung hochladen, fertig
Vorschaubild
selbst im Bildprogramm verkleinern
entsteht automatisch auf dem Server
Webspace
jeder Speicherplatz genügt, auch einer ohne PHP
PHP und eine Datenbank, beim Script PHP ab 8.2 und MySQL oder MariaDB
Angriffsfläche
kaum: kein Login, kein Upload, keine Datenbank
Anmeldung und Upload sind Angriffsziele, das Script sperrt nach 5 Fehlversuchen für 5 Minuten
Pflege
nichts zu aktualisieren
Updates des Scripts einspielen
Entscheidend ist, wie oft sich die Galerie ändert. Zwölf Fotos einer Feier, die nie mehr ergänzt werden, sind als HTML-Seite gut aufgehoben. Kommen regelmäßig Bilder dazu, gibt es mehrere Kategorien oder sollen andere Personen ohne HTML-Kenntnisse Fotos einstellen, nimmt dir PHP fast die ganze Arbeit ab.
Einen Mittelweg bieten Bildverwaltungen mit HTML-Export, etwa das Modul „Web“ in Lightroom Classic oder die HTML-Galerie in digiKam. Sie verkleinern die Fotos auf deinem Rechner und schreiben fertige HTML-Dateien, die du hochlädst. Das spart die Handarbeit. Für jedes neue Foto exportierst du die Galerie aber neu, und zwar an dem Rechner, auf dem Programm und Fotoordner liegen.
Wenn du den Unterschied selbst sehen willst, kannst du das Bildergalerie-Script kostenlos herunterladen und die Vorlage tpl/bildergalerie.html mit dem Seitenquelltext der fertigen Galerie vergleichen.
Häufige Fragen zu PHP und HTML
PHP und HTML lernen: womit fange ich an?
Mit HTML, denn jede PHP-Seite gibt am Ende HTML aus, und wer das Ergebnis nicht lesen kann, kann den Code dahinter nicht beurteilen. Für den Betrieb des Bildergalerie-Scripts brauchst du keins von beiden: Fotos, Kategorien und Einstellungen pflegst du in der Verwaltung. HTML und CSS werden nützlich, wenn du die Vorlage an deine Website anpasst, PHP erst, wenn du die Galerie erweitern willst.
Warum steht <?php in meinem Seitenquelltext?
Dann wurde der Code nicht ausgeführt. Meist steht er in einer Datei mit der Endung .html oder in der Vorlage tpl/bildergalerie.html. Die Galerie liest ihre Vorlage nur als Text ein und ersetzt Platzhalter wie {AUSGABE_BILDERGALERIE}, PHP-Code darin bleibt wirkungslos. Für eine Jahreszahl in der Fußzeile nimmst du dort besser ein kleines JavaScript. Zeigt dagegen auch eine .php-Datei ihren Code, ist PHP beim Hoster abgeschaltet. Das musst du sofort beheben, denn dann wären auch Zugangsdaten in Konfigurationsdateien lesbar.
Kann ich PHP in eine .html-Datei schreiben?
In der üblichen Einrichtung nicht: Der Webserver reicht nur Dateien mit der Endung .php an PHP weiter. In einer .php-Datei darfst du HTML und PHP mischen, etwa <p>Stand: <?php echo date('d.m.Y'); ?></p>. Der Server ersetzt den Teil zwischen <?php und ?> durch das Ergebnis, an den Browser geht nur <p>Stand: 12.10.2026</p>.
Ist eine PHP-Galerie langsamer als eine HTML-Seite?
Messbar ja, spürbar kaum. Die HTML-Datei liegt fertig bereit, die PHP-Seite muss erst Code ausführen und die Datenbank fragen, deren Antworten die Galerie einige Minuten zwischenspeichert. Die meiste Ladezeit kosten ohnehin die Fotos selbst, und die schickt der Server in beiden Fällen als fertige Dateien, die Vorschaubilder etwa direkt aus bilder/tn/.
Verwandte Themen
Diese Beiträge vertiefen die Begriffe rund um PHP und HTML: