PHP lernen: Grundlagen und sichere Praxisbeispiele

🛠️ Empfohlene Tools für PHP-Entwickler

Diese Tools nutze ich selbst – sie helfen Ihnen, Ihre PHP-Projekte professionell umzusetzen und zu vermarkten.

⚡ ExeOutput for PHP

PHP-Anwendungen in eigenständige Windows-EXE-Dateien kompilieren – perfekt für den professionellen Vertrieb.

Jetzt ansehen →

📄 HTML Executable

HTML-Dateien und Websites als eigenständige Windows-EXE-Dateien kompilieren.

Jetzt ansehen →

🔒 XLS Padlock

Excel-Arbeitsmappen als EXE kompilieren und schützen – perfekt für den professionellen Vertrieb.

Jetzt ansehen →

🐍 VBA Padlock

VBA-Code kompilieren und Office-Lösungen verkaufen – ohne Source-Code-Weitergabe.

Jetzt ansehen →

📦 Paquet Builder

Professionelle Windows-Installationsprogramme für Ihre Anwendungen erstellen.

Jetzt ansehen →

* Affiliate-Links: Bei einem Kauf über diese Links erhalten wir eine kleine Provision – für Sie entstehen keine zusätzlichen Kosten.

1. Einführung: Was ist PHP?

PHP (rekursive Abkürzung für "PHP: Hypertext Preprocessor") ist eine serverseitige Skriptsprache, die speziell für die Web-Entwicklung entwickelt wurde. Anders als JavaScript, das im Browser des Besuchers läuft, wird PHP auf dem Server ausgeführt – der Besucher sieht nur das fertige Ergebnis.

💡 Merke: PHP ist Open Source (kostenlos), plattformunabhängig (läuft auf Windows, Linux, macOS) und wird von einer riesigen Community weiterentwickelt.

📊 PHP im Überblick

MerkmalEinordnung
Aktuelle HauptversionPHP 8.5 (veröffentlicht im November 2025)
Aktueller Stand dieses LeitfadensPHP 8.5.8, veröffentlicht im Juli 2026
Bekannte PHP-ProjekteWordPress, Drupal, Laravel, Symfony, Magento und Shopware
Typische EinsatzbereicheWebseiten, APIs, Kommandozeilenprogramme und Hintergrundprozesse
Lizenz und PlattformenOpen Source; verfügbar unter anderem für Linux, Windows und macOS

🧩 Wofür wird PHP eingesetzt?

  • Dynamische Webseiten – Inhalte, die sich für jeden Besucher ändern
  • Content-Management-Systeme – WordPress, Joomla, Drupal
  • Webshops – Magento, WooCommerce, Shopware
  • Datenbankanwendungen – Benutzerverwaltung, Bestellsysteme
  • APIs & Webservices – REST-APIs für mobile Apps
  • Formulare & Kontaktseiten – Verarbeitung von Benutzereingaben
  • Login-Systeme – Benutzerregistrierung und Authentifizierung
✅ PHP eignet sich gut für den Einstieg in serverseitige Web-Entwicklung. Die Sprache ist gut dokumentiert, weit verbreitet und bei vielen Hosting-Angeboten verfügbar.

2. Die Geschichte von PHP

PHP wurde 1994 von Rasmus Lerdorf entwickelt – ursprünglich als kleine Sammlung von Perl-Skripten, um seine eigene Homepage zu verwalten. Aus dem Hobbyprojekt wurde schnell eine der erfolgreichsten Programmiersprachen der Welt.

📅 Zeitleiste der PHP-Entwicklung

JahrVersionBedeutung
1994/1995Personal Home Page ToolsRasmus Lerdorf entwickelt die ersten Werkzeuge; 1995 werden sie öffentlich angekündigt.
1998PHP 3.0Neu entwickelte Sprachversion und wichtige Grundlage für die breite Verbreitung.
2000PHP 4.0Die Zend Engine wird zur neuen Ausführungsbasis.
2004PHP 5.0Deutlich erweitertes Objektmodell und neue Sprachfunktionen.
2015PHP 7.0Große Verbesserungen bei Laufzeit, Speicherbedarf und Typsystem.
2020PHP 8.0JIT, Union Types, Attribute, benannte Argumente und match.
2024PHP 8.4Property Hooks, asymmetrische Sichtbarkeit und eine modernisierte DOM-API.
2025PHP 8.5URI-Erweiterung, Pipe-Operator und weitere Sprachverbesserungen.
💡 Interessant: PHP wird von der Zend Engine angetrieben – einer leistungsstarken Laufzeitumgebung, die den Code optimiert und ausführt.

3. Wie funktioniert PHP?

PHP-Code wird auf dem Server ausgeführt. Bei einem Seitenaufruf verarbeitet die Anwendung die Anfrage und sendet anschließend eine fertige Antwort an den Browser.

🔁 Der Ablauf im Detail

  1. Zunächst ruft der Browser eine URL auf, zum Beispiel https://beispiel.de/produkte.
  2. Anschließend verarbeitet der Webserver die Anfrage und übergibt sie entsprechend seiner Konfiguration an die PHP-Laufzeit.
  3. Die PHP-Anwendung führt ihre Logik aus und prüft bei Bedarf Sitzung, Eingaben und Berechtigungen.
  4. PHP greift gegebenenfalls auf Datenbanken oder Dienste zu und erstellt eine Antwort.
  5. Der Server sendet die Antwort, beispielsweise als HTML oder JSON.
  6. Der Browser verarbeitet die Antwort und stellt den Inhalt dar.
Browser Webserver PHP-Laufzeit Datenbank

Der Browser erhält die erzeugte Antwort, beispielsweise HTML oder JSON – nicht den serverseitigen PHP-Quellcode.

⚠️ Wichtig: Bei korrekt konfiguriertem Webserver wird PHP ausgeführt und nicht als Quelltext ausgeliefert. Konfigurationsfehler, Backups im Webverzeichnis oder öffentlich zugängliche Repositorys können Quellcode dennoch offenlegen.

4. Erste Schritte mit PHP

Um PHP auszuprobieren, brauchen Sie einen Webserver mit PHP-Unterstützung. Für den lokalen Einstieg können Sie ein fertiges Entwicklungspaket, eine Container-Umgebung oder eine direkt installierte, unterstützte PHP-Version verwenden. Prüfen Sie anschließend im Terminal mit php --version, welche Version tatsächlich ausgeführt wird.

📝 Ihr erstes PHP-Skript

📄 index.php
<!DOCTYPE html>
<html>
<head>
    <title>Mein erstes PHP-Skript</title>
</head>
<body>

    <?php
        // Das ist ein Kommentar – er wird nicht ausgeführt
        echo "<h1>Hallo Welt! 👋</h1>";
        echo "<p>Mein erster PHP-Code läuft!</p>";
    ?>

    <p>Das ist normaler HTML-Code.</p>

</body>
</html>

🔍 Erklärung Zeile für Zeile

  • <?php – öffnet den PHP-Block
  • // – einzeiliger Kommentar (wird ignoriert)
  • echo "Hallo Welt!"; – gibt den Text "Hallo Welt!" aus
  • ?> – schließt den PHP-Block
  • Alles außerhalb von <?php ... ?> ist normaler HTML-Code
📤 Ausgabe im Browser:

Hallo Welt! 👋

Mein erster PHP-Code läuft!

Das ist normaler HTML-Code.

💡 Tipp: Jede PHP-Anweisung endet mit einem Semikolon (;). In Dateien, die ausschließlich PHP enthalten, wird das schließende ?> üblicherweise weggelassen.

5. Variablen & Datentypen

Variablen sind Behälter für Daten. In PHP beginnen sie immer mit einem Dollarzeichen ($).

📝 Beispiele für Variablen

📄 variablen.php
<?php
    // Text (String)
    $name = "Anna";
    $stadt = "Berlin";

    // Ganze Zahlen (Integer)
    $alter = 28;
    $anzahl = 5;

    // Kommazahlen (Float)
    $preis = 19.99;

    // Wahr/Falsch (Boolean)
    $ist_aktiv = true;
    $ist_geloescht = false;

    // Ausgabe
    echo "Name: " . $name . "<br>";
    echo "Alter: " . $alter . "<br>";
    echo "Preis: " . $preis . " €<br>";
?>
📤 Ausgabe:
Name: Anna
Alter: 28
Preis: 19.99 €

📊 Die wichtigsten Datentypen in PHP

TypBeschreibungBeispiel
string Text / Zeichenkette "Hallo Welt"
int Ganze Zahl 42
float Kommazahl 3.14
bool Wahr / Falsch true / false
array Liste / Sammlung von Werten ["Apfel", "Banane", "Kirsche"]
null Kein Wert / leer null

🔗 Strings verknüpfen (Konkatenation)

Strings werden mit einem Punkt (.) verbunden – nicht mit einem Pluszeichen (+).

<?php
    $vorname = "Anna";
    $nachname = "Schmidt";
    $vollname = $vorname . " " . $nachname;

    echo "Vollständiger Name: " . $vollname;
    // Ausgabe: Vollständiger Name: Anna Schmidt
?>
💡 Tipp: In PHP können Sie Variablen direkt in Strings einbetten, wenn Sie doppelte Anführungszeichen (") verwenden:

echo "Hallo $vorname, schön dich zu sehen!";

6. Bedingungen & Schleifen

Mit Bedingungen können Sie Entscheidungen treffen. Mit Schleifen können Sie Code wiederholen.

🔀 if / else – Entscheidungen treffen

📄 bedingungen.php
<?php
    $alter = 16;

    if ($alter >= 18) {
        echo "Sie sind volljährig – willkommen!";
    } else {
        echo "Sie sind noch minderjährig.";
    }

    // Ausgabe: Sie sind noch minderjährig.

    // Mehrere Bedingungen mit elseif
    $note = 2;

    if ($note == 1) {
        echo "Sehr gut!";
    } elseif ($note == 2) {
        echo "Gut!";
    } elseif ($note == 3) {
        echo "Befriedigend";
    } else {
        echo "Nicht bestanden";
    }
    // Ausgabe: Gut!
?>

🔄 for-Schleife – Wiederholungen

<?php
    // Zahlen von 1 bis 5 ausgeben
    for ($i = 1; $i <= 5; $i++) {
        echo "Zahl: " . $i . "<br>";
    }

    /* Ausgabe:
    Zahl: 1
    Zahl: 2
    Zahl: 3
    Zahl: 4
    Zahl: 5
    */
?>

🔄 foreach – Arrays durchlaufen

<?php
    $farben = ["Rot", "Grün", "Blau", "Gelb"];

    foreach ($farben as $farbe) {
        echo "Farbe: " . $farbe . "<br>";
    }

    /* Ausgabe:
    Farbe: Rot
    Farbe: Grün
    Farbe: Blau
    Farbe: Gelb
    */
?>
💡 Tipp: foreach ist die einfachste Art, Arrays zu durchlaufen – keine Zählervariable nötig!

7. Funktionen selbst schreiben

Funktionen sind wiederverwendbare Code-Blöcke. Sie machen Ihren Code übersichtlicher und wiederverwendbar.

📝 Eigene Funktion erstellen

📄 funktionen.php
<?php
    // Eine einfache Funktion
    function begruessung($name) {
        return "Hallo " . $name . "!";
    }

    // Funktion aufrufen
    echo begruessung("Anna");   // Ausgabe: Hallo Anna!
    echo begruessung("Ben");    // Ausgabe: Hallo Ben!

    // Funktion mit mehreren Parametern
    function summe($a, $b) {
        return $a + $b;
    }

    echo summe(5, 3);  // Ausgabe: 8
?>

📦 Vordefinierte Funktionen in PHP

FunktionBeschreibungBeispiel
strlen() Länge eines Strings in Bytes strlen("Hallo") → 5
strtoupper() Alles in Großbuchstaben strtoupper("hallo") → "HALLO"
strtolower() Alles in Kleinbuchstaben strtolower("HALLO") → "hallo"
count() Anzahl der Elemente in einem Array count(["a","b","c"]) → 3
date() Datum oder Uhrzeit formatieren date("d.m.Y")
random_int() Kryptografisch sichere Ganzzahl random_int(1, 10)
💡 Unicode-Hinweis: strlen() zählt Bytes. Für die Anzahl von Zeichen in UTF-8-Texten verwenden Sie – sofern die Erweiterung verfügbar ist – mb_strlen().

8. PHP & Datenbanken (MySQL)

PHP unterstützt über Erweiterungen verschiedene Datenbanken. Eine verbreitete Kombination ist PHP mit MySQL oder MariaDB. PDO stellt dafür eine einheitliche Schnittstelle bereit.

📝 Datenbankverbindung mit PDO (empfohlen)

📄 db_connect.php
<?php
    // Zugangsdaten in der Praxis aus sicherer Konfiguration laden
    $host = "localhost";
    $dbname = "meine_datenbank";
    $user = "app_benutzer";
    $password = "GEHEIMNIS_NICHT_IM_REPOSITORY";

    $dsn = "mysql:host=$host;dbname=$dbname;charset=utf8mb4";
    $optionen = [
        PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
        PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
        PDO::ATTR_EMULATE_PREPARES => false,
    ];

    try {
        $pdo = new PDO($dsn, $user, $password, $optionen);
    } catch (PDOException $e) {
        error_log($e->getMessage());
        http_response_code(500);
        exit("Die Datenbank ist vorübergehend nicht erreichbar.");
    }
?>

📝 Daten aus einer Tabelle abfragen

📄 daten_abfragen.php
<?php
    // ... Verbindung aus vorherigem Beispiel ...

    // Daten abfragen
    $sql = "SELECT * FROM benutzer WHERE stadt = :stadt";
    $stmt = $pdo->prepare($sql);
    $stmt->execute(['stadt' => 'Berlin']);
    $benutzer = $stmt->fetchAll();

    foreach ($benutzer as $b) {
        $name = htmlspecialchars(
            $b['name'],
            ENT_QUOTES | ENT_SUBSTITUTE,
            'UTF-8'
        );
        $email = htmlspecialchars(
            $b['email'],
            ENT_QUOTES | ENT_SUBSTITUTE,
            'UTF-8'
        );

        echo "Name: $name<br>";
        echo "E-Mail: $email<br><br>";
    }
?>
💡 Wichtig: Prepared Statements trennen SQL-Struktur und Parameterwerte. Dynamische Tabellen- oder Spaltennamen benötigen zusätzlich feste Erlaubnislisten, weil Platzhalter normalerweise nur für Werte eingesetzt werden können.
⚠️ Fehler und Geheimnisse: Datenbankkennwörter gehören nicht in öffentlich zugängliche Dateien oder Repositorys. Interne Exception-Texte werden protokolliert, aber nicht an Besucher ausgegeben.

9. Fortgeschrittene Konzepte

🧩 Objektorientierte Programmierung (OOP)

Modernes PHP bietet Klassen, Interfaces, Traits, Sichtbarkeiten, Typdeklarationen und weitere Werkzeuge für objektorientierte Programmierung. OOP kann größere Anwendungen strukturieren, ist aber kein Ersatz für ein verständliches fachliches Design.

📄 oop.php
<?php
    declare(strict_types=1);

    final class Auto
    {
        public function __construct(
            public readonly string $marke,
            public readonly string $modell,
            public readonly int $ps,
        ) {
        }

        public function beschreibung(): string
        {
            return "$this->marke $this->modell mit $this->ps PS";
        }
    }

    $meinAuto = new Auto("BMW", "3er", 184);
    echo $meinAuto->beschreibung();
    // Ausgabe: BMW 3er mit 184 PS

🔒 Fehlerbehandlung mit try/catch

<?php
    try {
        $ergebnis = 10 / 0; // Fehler: Division durch Null
    } catch (DivisionByZeroError $e) {
        error_log($e->getMessage());
        echo "Die Berechnung konnte nicht ausgeführt werden.";
    } finally {
        // Aufräumarbeiten, falls erforderlich
    }
⚠️ Produktionsbetrieb: Detaillierte Fehlermeldungen gehören in geschützte Logs. Besucher erhalten eine verständliche, aber allgemeine Meldung ohne Pfade, SQL oder Zugangsdaten.

10. Praxis-Beispiele

📧 Beispiel 1: Kontaktformular

📄 kontakt.php
<?php
    session_start();

    $_SESSION['csrf_token'] ??= bin2hex(random_bytes(32));
    $fehler = [];
    $erfolg = false;

    function e(string $wert): string
    {
        return htmlspecialchars(
            $wert,
            ENT_QUOTES | ENT_SUBSTITUTE,
            'UTF-8'
        );
    }

    if ($_SERVER['REQUEST_METHOD'] === 'POST') {
        $token = (string) ($_POST['csrf_token'] ?? '');
        $name = trim((string) ($_POST['name'] ?? ''));
        $emailEingabe = trim((string) ($_POST['email'] ?? ''));
        $nachricht = trim((string) ($_POST['nachricht'] ?? ''));
        $email = filter_var($emailEingabe, FILTER_VALIDATE_EMAIL);

        if (!hash_equals($_SESSION['csrf_token'], $token)) {
            $fehler[] = 'Die Anfrage ist abgelaufen. Bitte erneut versuchen.';
        }
        if ($name === '' || $email === false || $nachricht === '') {
            $fehler[] = 'Bitte alle Felder korrekt ausfüllen.';
        }

        if ($fehler === []) {
            // In Produktion: gepflegte Mailer-Bibliothek verwenden.
            // Absender fest konfigurieren, validierte Adresse als Reply-To.
            $erfolg = true;
            $_SESSION['csrf_token'] = bin2hex(random_bytes(32));
        }
    }
?>
<!DOCTYPE html>
<html lang="de">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Kontakt</title>
</head>
<body>

    <?php foreach ($fehler as $meldung): ?>
        <p class="fehler"><?= e($meldung) ?></p>
    <?php endforeach; ?>

    <?php if ($erfolg): ?>
        <p class="erfolg">Ihre Nachricht wurde angenommen.</p>
    <?php endif; ?>

    <form method="post">
        <input type="hidden" name="csrf_token"
               value="<?= e($_SESSION['csrf_token']) ?>">

        <label for="name">Name</label>
        <input id="name" type="text" name="name" required maxlength="100">

        <label for="email">E-Mail</label>
        <input id="email" type="email" name="email" required maxlength="254">

        <label for="nachricht">Nachricht</label>
        <textarea id="nachricht" name="nachricht" required maxlength="5000"></textarea>

        <button type="submit">Absenden</button>
    </form>

</body>
</html>
⚠️ Lernbeispiel: Ein produktives Formular benötigt zusätzlich Missbrauchsschutz, Datenschutzprüfung, sichere Transportverschlüsselung, Protokollierung ohne Nachrichtentexte und eine zuverlässig konfigurierte Mailer-Lösung. Browservalidierung verbessert nur die Bedienung; das Backend muss selbst prüfen.

📊 Beispiel 2: Zufälliges Zitat

📄 zitat.php
<?php
    $zitate = [
        "Code spricht, wenn der Entwickler schweigt.",
        "PHP ist die Sprache, die das Web zusammenhält.",
        "Ein guter Programmierer ist ein fauler Programmierer.",
        "Debugging ist wie Detektivarbeit – nur der Täter ist Ihr eigener Code."
    ];

    $zufall = random_int(0, count($zitate) - 1);
    $zitat = htmlspecialchars(
        $zitate[$zufall],
        ENT_QUOTES | ENT_SUBSTITUTE,
        'UTF-8'
    );

    echo "<blockquote>$zitat</blockquote>";
?>

11. Tipps & Best Practices

✅ Code-Organisation: Halten Sie Ihren Code sauber und strukturiert. Verwenden Sie sinnvolle Namen für Variablen und Funktionen.
✅ Kommentare schreiben: Erklären Sie komplizierte Code-Stellen mit Kommentaren. Das hilft Ihnen selbst in ein paar Monaten und anderen Entwicklern.
⚠️ Fehlerumgebung trennen: Erfassen Sie während der Entwicklung alle relevanten Fehler. Im Produktionsbetrieb werden Details geschützt protokolliert und nicht im Browser angezeigt.
✅ Sicherheit ernst nehmen: Validieren Sie Eingaben nach fachlichen Regeln. Verwenden Sie kontextbezogene Ausgabecodierung, Prepared Statements, CSRF-Schutz und serverseitige Berechtigungsprüfungen.
✅ Abhängigkeiten pflegen: Verwalten Sie Pakete reproduzierbar mit Composer, prüfen Sie Änderungen und installieren Sie sicherheitsrelevante Aktualisierungen zeitnah und kontrolliert.
✅ Geheimnisse schützen: Zugangsdaten und API-Schlüssel gehören nicht in den Quellcode oder in öffentliche Repositorys. Laden Sie sie aus einer geschützten Konfiguration der jeweiligen Laufzeitumgebung.

📋 PHP-Code-Standards (PSR)

  • PSR-1: Grundlegende Code-Standards
  • PSR-12: Aktueller erweiterter Stilstandard; ersetzt PSR-2
  • PSR-4: Autoloading-Standard für Klassen

Diese Standards werden von der PHP-FIG (Framework Interop Group) veröffentlicht. Ein Projekt sollte die für seinen Technologie-Stack vereinbarten Standards konsequent anwenden; WordPress besitzt beispielsweise zusätzlich eigene Coding Standards.

12. Weiterführende Ressourcen

Nutzen Sie für Versions-, Syntax- und Sicherheitsfragen möglichst die aktuelle Primärdokumentation. Blogbeiträge und Bücher können beim Lernen helfen, veralten jedoch schneller.

13. PHP-Lern-Checkliste

Markieren Sie die Themen, die Sie bereits praktisch in einem eigenen Testprojekt angewendet haben. Die Auswahl bleibt nur während dieses Seitenaufrufs erhalten.

0 von 10 Punkten erledigt

14. Häufige Fragen zu PHP

Ist PHP nur für Webseiten geeignet?

Nein. PHP kann auch Kommandozeilenprogramme, Hintergrundaufgaben, APIs und verschiedene Automatisierungen ausführen. Der Schwerpunkt bleibt die serverseitige Webentwicklung.

Welche PHP-Version sollte ich verwenden?

Verwenden Sie eine von PHP.net unterstützte Version, die Ihr Framework, CMS und Hosting freigeben. Installieren Sie aktuelle Patch-Versionen nach kontrollierten Tests.

Ist PHP-Code im Browser sichtbar?

Bei korrekter Serverkonfiguration sieht der Browser nur die erzeugte Antwort. Öffentlich erreichbare Backups, Repositorys oder Konfigurationsfehler können Quelltext dennoch offenlegen.

Reicht htmlspecialchars() für jede Sicherheit?

Nein. Die Funktion hilft bei HTML-Textausgabe. SQL benötigt Parameterbindung; URLs, JavaScript und andere Kontexte benötigen jeweils passende Behandlung. Zusätzlich bleiben Berechtigungen, CSRF-Schutz und sichere Sessions erforderlich.

PDO oder MySQLi?

Beide Schnittstellen unterstützen sichere parametrisierte Abfragen. PDO bietet eine einheitliche API für mehrere Datenbanksysteme; MySQLi konzentriert sich auf MySQL. Entscheidend ist die korrekte, konsequente Nutzung.

Brauche ich sofort ein Framework?

Für die Grundlagen ist kleines, übersichtliches PHP hilfreich. Bei produktiven Anwendungen vermeiden gepflegte Framework-Komponenten viel fehleranfälligen Eigenbau, insbesondere bei Routing, Validierung, Authentifizierung und Schutzmechanismen.

← Zurück zu den Grundlagen

© 2026 Digitale Start-Hilfe – PHP-Leitfaden für Einsteiger & Fortgeschrittene

↑ Zurück nach oben
Datenschutz-Übersicht
digitale-start-hilfe.de

Auf dieser Website werden Cookies verwendet, um deine Nutzererfahrung zu verbessern. Du kannst in den {setting}Einstellungen{/setting} mehr erfahren oder Cookies jederzeit ablehnen.

Eine vollständige Liste aller Cookies findest du in unserer Cookie-Erklärung.

Weitere Informationen findest du in unserer Datenschutzerklärung.

Notwendige Cookies & Chatbot

Diese Cookies sind für den Betrieb der Website unbedingt erforderlich und können nicht deaktiviert werden. Dazu gehören auch grundlegende Funktionen wie der WebChatAgent (Chatbot) von WebChatAgent.com, der die direkte Kommunikation mit uns ermöglicht.