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?

Vergleichsgrafik: Unterschied PHP und HTML - Server erzeugt Inhalte, Browser zeigt das fertige HTML an

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.

SpracheWo und wannBeispiel aus der Galerie
PHPauf dem Server, vor dem Versandzählt die Fotos einer Kategorie und schreibt „4 Bilder“ unter die Kachel
HTMLwird verschickt, der Browser stellt es darÜberschriften, Vorschaubilder, Links und der fertige Text „4 Bilder“
CSSwird mitgeschickt, der Browser wendet es anlegt in css/layout.css fest, in welcher Schrift und Farbe „4 Bilder“ erscheint
JavaScriptim 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.
  • 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.

Animiertes Vergleichsdiagramm: Foto 41 liegt per FTP im Ordner, doch urlaub.html bleibt bei 40 Bildern. In der PHP-Galerie bekommt die Datenbank eine Zeile mehr, bildergalerie.php zählt beim Aufruf 41. Zum Browser geht in beiden Fällen nur 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:

if ($bilderAnzahl <= 0 && !$leereAnzeigen) { continue;
}
// ...
$anzahlText = ($bilderAnzahl === 1) ? '1 Bild' : (($bilderAnzahl > 1) ? $bilderAnzahl . ' Bilder' : 'Noch keine Bilder');

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:

  1. 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.
  2. 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.
  3. 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:

SituationGalerie aus reinem HTMLGalerie mit PHP
neues FotoDatei von Hand ändern und hochladenin der Verwaltung hochladen, fertig
Vorschaubildselbst im Bildprogramm verkleinernentsteht automatisch auf dem Server
Webspacejeder Speicherplatz genügt, auch einer ohne PHPPHP und eine Datenbank, beim Script PHP ab 8.2 und MySQL oder MariaDB
Angriffsflächekaum: kein Login, kein Upload, keine DatenbankAnmeldung und Upload sind Angriffsziele, das Script sperrt nach 5 Fehlversuchen für 5 Minuten
Pflegenichts zu aktualisierenUpdates 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: