Einführung in PHP und Webentwicklung
Webentwicklung: Grundlagen und Architektur
Das Client-Server-Modell
Das Client-Server-Modell ist eine grundlegende Architektur der modernen Webentwicklung. Es beschreibt die Interaktion zwischen zwei Parteien: einem Client, der eine Anfrage stellt, und einem Server, der auf diese Anfrage antwortet. Ein Server stellt Dienste, Ressourcen oder Informationen bereit. Im Kontext der Webentwicklung ist ein Webserver ein Programm, das Webseiten, APIs oder andere Inhalte an Clients ausliefert. Beispiele für Webserver-Software sind Apache, Nginx und IIS (Internet Information Services). Ein Client ist ein Gerät oder eine Anwendung, die diese Ressourcen vom Server anfordert. Dies kann ein Webbrowser wie Chrome, Firefox oder Microsoft Edge sein, aber auch eine mobile App oder ein anderes Programm, das über das Internet kommuniziert. Ein Beispiel aus dem Alltag: Wenn Sie eine Webseite in Ihrem Browser aufrufen, fungiert der Browser als Client. Der Webserver, der die Inhalte dieser Webseite hostet, ist der Server. Der Browser schickt eine Anfrage (Request) an den Server, und der Server antwortet mit der angeforderten Seite (Response).
Der Request-Response-Zyklus
Der Request-Response-Zyklus beschreibt die Kommunikation zwischen Client und Server in einem Websystem. Dieser Zyklus läuft in folgenden Schritten ab: Client sendet eine Anfrage (Request): Der Benutzer gibt eine URL in den Browser ein oder klickt auf einen Link. Der Browser (Client) erstellt eine HTTP-Anfrage an den entsprechenden Server. Server verarbeitet die Anfrage: Der Server empfängt die Anfrage, verarbeitet sie und sucht nach den angeforderten Ressourcen (z. B. HTML-Dateien, Bilder, Datenbankinhalte). Server sendet eine Antwort (Response): Nachdem die Anfrage verarbeitet wurde, sendet der Server eine HTTP-Antwort zurück an den Client. Diese Antwort enthält den Statuscode (z. B. 200 OK oder 404 Not Found) und die angeforderten Inhalte. Client zeigt die Antwort an: Der Browser des Clients interpretiert die empfangenen Inhalte und zeigt die Webseite an. Beispiel: Der Client (Browser) fordert die Webseite https://www.fernfh.ac.at an. Der Server empfängt die Anfrage, der Webserver verarbeitet die Anfrage, sucht die passende Datei und schickt diese zurück. Der Browser zeigt die Webseite an.
Bestandteile einer Webanwendung
Webserver
Ein Webserver ist eine Software, die HTTP-Anfragen verarbeitet und Webseiten oder andere Ressourcen bereitstellt. Die beiden am häufigsten verwendeten Webserver sind Apache und Nginx: Apache: Ein weit verbreiteter Open-Source-Webserver, der für seine Flexibilität und umfangreiche Konfigurationsmöglichkeiten bekannt ist. Er unterstützt Module zur Erweiterung von Funktionen wie URL-Rewrites oder Authentifizierung. Nginx: Ein moderner, leistungsstarker Webserver, der für seine hohe Geschwindigkeit und geringe Ressourcenbelastung geschätzt wird. Nginx eignet sich besonders gut für den Einsatz als Reverse Proxy und zur Lastverteilung. Beide Serverprogramme können sowohl statische Inhalte (HTML, CSS, Bilder) als auch dynamische Inhalte (PHP-Seiten, APIs) bereitstellen.
Datenbanken
Webserver arbeiten oft mit Datenbanken zusammen, um dynamische Inhalte bereitzustellen. Während der Webserver die Anfrage verarbeitet, ruft er oft zusätzliche Daten aus einer Datenbank ab. Diese Datenbanken speichern Informationen wie Benutzerdaten, Produktkataloge oder Artikel und ermöglichen es, Webseiteninhalte dynamisch zu generieren. Zu den gängigen Datenbankmanagementsystemen zählen: MySQL/MariaDB: Häufig in Kombination mit PHP verwendet, besonders im E-Commerce. PostgreSQL: Ein leistungsstarkes Open-Source-System mit erweiterten Funktionen. SQLite: Eine leichtgewichtige Datenbank für kleinere Projekte. Ein typisches Szenario in einer Webanwendung ist: Der Client fordert eine Produktseite an. Der Webserver verarbeitet die Anfrage. Der Webserver ruft die Produktinformationen aus der Datenbank ab. Der Server generiert die HTML-Seite mit den Daten und sendet sie an den Client zurück. Das Zusammenspiel zwischen Webservern und Datenbanken ermöglicht es, große, dynamische E-Commerce-Plattformen wie Magento effizient zu betreiben. 1.1.2.3 Web-Anwendung Der Kern der Anwendung, oft mit Frameworks wie Laravel, Symfony oder Magento entwickelt.
Erweiterte Funktionen
- OpCache
- Der PHP OPcache ist ein Caching-Mechanismus, der bereits kompilierte PHP-Skripte im Speicher hält, um die Ausführungszeit zu verkürzen und die Serverlast zu reduzieren. Dadurch wird vermieden, dass PHP-Dateien bei jedem Request erneut geparst und kompiliert werden, was die Performance von Webanwendungen erheblich steigert.
- CDN
- Verteilt statische Inhalte (Bilder, CSS, JS) auf mehrere Server weltweit, um die Ladezeiten zu verbessern.
- Varnish
- Reverse Proxy und Caching-Lösung, die dynamische Inhalte zwischenspeichern kann, um die Performance zu verbessern.
- Redis
- In-Memory-Datenbank, die als Cache, Session-Store oder zur Message-Queue verwendet wird.
- Memcached
- Einfacher In-Memory-Cache, um häufig genutzte Daten schneller bereitzustellen.
- Load Balancer
- Verteilt eingehende Anfragen auf mehrere Server, um Last zu verteilen und Ausfallsicherheit zu gewährleisten. Beispiele: HAProxy, AWS Elastic Load Balancing.
- Queue-System
- Verarbeitet Aufgaben asynchron, um die Hauptanwendung zu entlasten. Beispiele: RabbitMQ, Kafka.
- API Gateway
- Bietet eine zentrale Schnittstelle für externe APIs und sorgt für Sicherheit, Monitoring und Load Balancing. Beispiele: Kong, Apigee.
- Service Worker
- Wird im Browser verwendet, um Offline-Funktionalität und Caching zu ermöglichen. Besonders wichtig für Progressive Web Apps (PWAs).
- Monitoring & Logging
- Überwacht die Performance der Anwendung und speichert Logs. Beispiele: Grafana, Kibana, Prometheus.
- Firewall/WAF (Web Application Firewall)
- Schützt die Webanwendung vor Angriffen wie SQL-Injection, XSS und anderen Webbedrohungen. Beispiele: AWS WAF, Cloudflare WAF.
- Container & Orchestrierung
- Container-Technologien (z. B. Docker) und Orchestrierungstools (z. B. Kubernetes) ermöglichen eine flexible und skalierbare Bereitstellung.
- CI/CD-Pipeline
- Automatisiert den Build- und Deployment-Prozess. Beispiele: GitLab CI, Jenkins, GitHub Actions.
- Identity Provider (IdP)
- Verwaltet Benutzeridentitäten und ermöglicht Single Sign-On (SSO). Beispiele: Keycloak, Okta, Auth0.
- Message Broker
- Vermittelt Nachrichten zwischen verschiedenen Diensten. Beispiele: RabbitMQ, Apache Kafka.
- Edge Functions
- Kleine Funktionen, die nahe am Client ausgeführt werden, um die Latenz zu verringern. Beispiele: Cloudflare Workers, AWS Lambda@Edge.
HTTP und HTTPS
Das Hypertext Transfer Protocol (HTTP) ist das Fundament der Kommunikation im World Wide Web. Es beschreibt, wie Clients (z. B. Webbrowser) mit Servern interagieren, um Webseiten und andere Ressourcen abzurufen. HTTPS ist die sichere Version von HTTP und nutzt Verschlüsselungstechnologien wie SSL/TLS, um die Kommunikation vor Manipulation und Abhören zu schützen.
Das Hypertext Transfer Protocol
HTTP ist ein textbasiertes Protokoll, das den Austausch von Informationen zwischen einem Client und einem Server regelt. Es arbeitet nach dem Request-Response-Prinzip: Der Client stellt eine Anfrage (Request), und der Server liefert eine Antwort (Response) zurück. Merkmale von HTTP: Verbindungslos: Jede Anfrage wird unabhängig behandelt. Es gibt keine dauerhafte Verbindung zwischen Client und Server. Statusbasiert: Der Server antwortet immer mit einem Statuscode, der den Erfolg oder Misserfolg der Anfrage angibt. Anwendungsprotokoll: HTTP wird auf der Anwendungsschicht genutzt und baut auf Protokollen wie TCP/IP auf. Ein typisches Beispiel für eine HTTP-Anfrage ist das Abrufen einer Webseite. Wenn ein Benutzer eine URL in den Browser eingibt, sendet der Browser eine HTTP-Anfrage an den Server, der die gewünschte Seite bereitstellt.
HTTP-Methoden
HTTP bietet verschiedene Methoden, die angeben, welche Art von Aktion der Client auf dem Server ausführen möchte. Die vier wichtigsten Methoden sind:
GET
Wird verwendet, um Daten vom Server abzurufen. Hat keine Nebenwirkungen auf den Server (idempotent).
Beispiel: Abrufen einer Webseite oder eines Bildes.
GET /index.html HTTP/1.1<br>Host: example.com
POST
Wird verwendet, um Daten an den Server zu senden (z. B. Formulareinsendungen). Kann neue Ressourcen erstellen oder bestehende aktualisieren.
Beispiel: Ein Benutzer sendet ein Kontaktformular ab.
POST /contact HTTP/1.1<br>Host: example.com<br>Content-Type: application/x-www-form-urlencoded<br><br>name=John&message=Hello
PUT
Wird verwendet, um eine Ressource auf dem Server zu erstellen oder zu ersetzen.
Beispiel: Hochladen oder Aktualisieren einer Datei.
PUT /file.txt HTTP/1.1 Host: example.com Content-Type: text/plain<br><br>This is a file content.
DELETE
Wird verwendet, um eine Ressource vom Server zu löschen.
Beispiel: Löschen einer Datei oder eines Eintrags.
DELETE /file.txt HTTP/1.1 Host: example.com
Andere wichtige Methoden sind HEAD, OPTIONS und PATCH, die je nach Anwendungsszenario genutzt werden.
HTTP Statuscodes
HTTP-Statuscodes sind dreistellige Zahlen, die angeben, wie der Server die Anfrage des Clients verarbeitet hat [1]
Wenn ein Client – sei es ein Notebook, Smartphone, Desktop-PC oder ein anderer Server – eine Webanwendung aufruft, wird zunächst ein HTTP-Request an den Webserver gesendet. Diese Anfrage kann sich auf die Startseite (die sogenannte "Main Page"), eine Unterseite oder auch einen spezifischen API-Endpunkt beziehen.
Der Webserver empfängt diesen Request und analysiert ihn auf Basis seiner Konfiguration. Je nach Art der angeforderten Ressource unterscheidet sich das weitere Vorgehen: Handelt es sich um eine statische Datei, beispielsweise ein Bild, ein CSS-Stylesheet oder ein JavaScript-File, so wird diese direkt und ohne weitere Verarbeitung vom Server ausgeliefert.
Wird hingegen eine dynamische Ressource angefragt – typischerweise ein PHP-Skript –, so übergibt der Webserver die Ausführung an den konfigurierten PHP-Interpreter. Dieser verarbeitet das Skript schrittweise. Im Rahmen dieser Verarbeitung kann es notwendig sein, Daten aus einer Datenbank, beispielsweise MySQL, abzurufen. Dies ist etwa dann der Fall, wenn die dynamisch generierte Seite Produktinformationen anzeigen soll, wie es in typischen E-Commerce-Anwendungen üblich ist. Sobald die benötigten Daten durch den PHP-Interpreter aus der Datenbank – etwa MySQL – abgerufen wurden, erfolgt deren Weiterverarbeitung innerhalb des PHP-Skripts. Dabei werden die Daten strukturiert, inhaltlich aufbereitet und schließlich in ein HTML-Dokument eingebettet, um eine für den Client interpretierbare Darstellung zu ermöglichen.
Nach Abschluss dieser Verarbeitung wird die vollständige HTTP-Antwort – bestehend aus HTML (und gegebenenfalls eingebetteten oder verlinkten CSS- und JavaScript-Ressourcen) – an den Webserver zurückgegeben. Der Webserver wiederum überträgt diese Antwort an den anfragenden Client, sodass dort die fertige Web-Seite im Browser dargestellt werden kann.
Tools
Web Developer Tools
Die Chrome Developer Tools (DevTools) ("Developer Toolbar") sind ein mächtes Werkzeug für Entwickler*innen und ein integraler Bestandteil moderner Webentwicklung. Sie ermöglichen eine tiefgehende Analyse, Inspektion und Optimierung von Webseiten direkt im Browser. Sie sind in Google Chrome sowie in Chromium-basierten Browsern (z. B. Microsoft Edge) integriert und stellen ein unverzichtbares Werkzeug für Frontend- und Backend-Entwickler dar.
1. Zugriff und grundlegender Aufbau
Die Developer Tools können in Chrome durch einen Rechtsklick auf eine Seite und Auswahl von „Untersuchen“ oder über die Taste F12
bzw. Strg + Umschalt + I
(bzw. Cmd
auf macOS) geöffnet werden. Die Benutzeroberfläche ist in mehrere Bereiche unterteilt, von denen jeder spezifische Aspekte der Webseite analysiert:
Elements
Console
Sources
Network
Performance
Memory
Application
Security
Lighthouse
Die Chrome Developer Tools sind in der Praxis unverzichtbar für die Fehlersuche und Qualitätskontrolle. Sie ermöglichen es, in Echtzeit auf das Verhalten von Webseiten zu reagieren, Styles und Layouts zu debuggen, Speicherzustände zu analysieren und die Kommunikation mit dem Server zu prüfen. Besonders im Zusammenspiel mit serverseitigen Technologien wie PHP oder datenbankbasierten Architekturen bieten sie wertvolle Einsichten in das Zusammenspiel zwischen Frontend und Backend.
Die effektive Nutzung der DevTools ist somit eine Schlüsselkompetenz für Webentwicklerinnen und -entwickler, insbesondere im Kontext komplexer und interaktiver Anwendungen. Eine fundierte Kenntnis ihrer Funktionalitäten trägt maßgeblich zur Effizienz und Qualität der Entwicklungsarbeit bei.
Im Folgenden werden die wichtigsten Bereiche und ihre Funktionalitäten erläutert.
Überblick über zentrale Funktionen
Elements: DOM-Inspektion und Live-Manipulation
Der Elements-Tab zeigt die aktuelle Struktur des Document Object Models (DOM) an, das der Browser zur Darstellung der Webseite generiert hat. Es ermöglicht die Inspektion und Bearbeitung der DOM-Struktur einer Webseite in Echtzeit. Hier können HTML-Elemente untersucht, CSS-Regeln direkt verändert und das Layout sowie das Box-Modell eines Elements visualisiert werden. Dies ist insbesondere bei der Behebung von Darstellungsfehlern oder beim gezielten Testen von Styling-Anpassungen hilfreich. Darüber hinaus lassen sich Event-Listener anzeigen und Pseudoklassen wie :hover
simulieren.
Diese Funktionalitäten sind besonders hilfreich zur Fehleranalyse bei Layout- und Styling-Problemen.
Console: Debugging und Logging
Die Console stellt ein interaktives Interface für JavaScript dar. Sie ermöglicht das Ausführen von JavaScript-Befehlen während der Laufzeit und zeigt Fehlermeldungen, Warnungen oder benutzerdefinierte Log-Ausgaben an. Entwicklerinnen und Entwickler können die Konsole nutzen, um schnell auf DOM-Elemente zuzugreifen, Funktionen zu testen oder Probleme im Verhalten von Skripten zu identifizieren. Auch komplexere Debugging-Szenarien lassen sich mit der Konsole realisieren, insbesondere in Kombination mit Breakpoints.
Sources: Debugging und Quellcode-Analyse
Im Sources-Tab steht der Quellcode im Fokus. Hier können JavaScript-Dateien durchsucht und analysiert, Breakpoints gesetzt und Watch-Expressions definiert werden. Der Call Stack, die aktuellen Scope-Variablen sowie die Möglichkeit zur schrittweisen Ausführung des Codes erlauben ein präzises Debugging komplexer Client-seitiger Logik. Unterstützt wird dies durch sogenannte Sourcemaps, welche die Zuordnung zwischen komprimierten oder transpilieren Skripten (z. B. aus TypeScript) und dem ursprünglichen Quellcode ermöglichen. Das hilft bei der gezielten Analyse komplexer Client-seitiger Logik.
Network: Analyse von HTTP-Requests
Der Network-Tab zeigt sämtliche HTTP-Requests und -Responses, die während des Ladens und der Ausführung einer Webseite stattfinden. Hier lassen sich Details wie HTTP-Methoden, Header, Statuscodes und Antwortzeiten einsehen. Das Einsehen der Request-Daten ist beispielsweise beim Debuggen von Formularen und AJAX-Requests hilfreich, um die gesendeten Daten anzuzeigen. Mit Hilfe des Waterfall-Diagramms können zeitliche Zusammenhänge zwischen einzelnen Anfragen nachvollzogen werden. Darüber hinaus besteht die Möglichkeit, Netzwerkbedingungen künstlich zu simulieren (z. B. langsame Mobilfunkverbindungen), um das Verhalten der Anwendung unter realistischen Bedingungen zu testen.
Diese Informationen sind essenziell für Performance-Optimierung und Fehlerdiagnose bei API-Kommunikation.
Performance: Laufzeitanalyse und Rendering
Der Bereich Performance erlaubt eine detaillierte Aufzeichnung und Analyse der Laufzeitverhalten einer Webseite. Während eines Recordings werden Informationen über Render-Zyklen, Scripting-Zeiten, Layout-Operationen und Repaints gesammelt. Diese Daten helfen dabei, Performance-Engpässe zu identifizieren und gezielt zu optimieren, beispielsweise durch Reduktion unnötiger DOM-Manipulationen oder die Entlastung des Main Threads.
Diese Daten helfen dabei, Engpässe und ineffiziente DOM-Updates zu identifizieren.
Application: Web Storage und Service Worker
Der Application-Tab gibt Einblick in clientseitige Speichertechnologien wie Local Storage, Session Storage, IndexedDB und Cookies. Darüber hinaus lassen sich hier Service Worker untersuchen, welche im Kontext von Progressive Web Apps (PWA) für Offline-Funktionalität und Hintergrundsynchronisation zuständig sind. Auch das App-Manifest einer installierbaren Webanwendung kann hier eingesehen werden.
Security: TLS- und Zertifikatsinformationen
Ein weiterer wichtiger Aspekt ist die Sicherheit der Webanwendung, die im Security-Tab thematisiert wird. Dieser zeigt, ob die Seite über HTTPS geladen wurde, welches TLS-Protokoll verwendet wird, welche Zertifikate zur Absicherung eingesetzt werden und ob potenzielle Schwachstellen wie „Mixed Content“ (unsichere Ressourcen über HTTP) vorliegen.
Lighthouse: Automatisierte Audits
Der Lighthouse-Tab bietet ein leistungsstarkes Analysewerkzeug, mit dem eine Webanwendung automatisiert hinsichtlich Performance, Barrierefreiheit, Best Practices, Suchmaschinenfreundlichkeit (SEO) und PWA-Konformität bewertet werden kann. Die dabei erzeugten Berichte enthalten nicht nur Bewertungen, sondern auch konkrete Handlungsempfehlungen zur Optimierung.
Die Berichte enthalten konkrete Optimierungsvorschläge und ermöglichen objektive Qualitätsanalysen.
Beispiel anhand der DevTools: Webserver erkennen
Sofern der Webservername im Respone Header mitgeschickt wird, ist dieser im "Netzwerk" Tab nach Auswahl einer Quelle (Hauptdokument, Bild, CSS oder JavaScript-Datei, die direkt vom Server geladen wird) erkennbar.
Oftmals wird der Webserver auch entfernt und nicht im Response Header mitgeschickt, um die Angriffsoberfläche für Schwachstellen zu minimieren.
PHP
PHP (rekursives Akronym für PHP: Hypertext Preprocessor) ist eine weit verbreitete Programmiersprache für Web-Anwendungen.
Die Programmiersprache ist weit verbreitet und wird auf mehr als 75% aller Internetseiten (mit Serverseitiger Programmiersprache) verwendet.
PHP geht auf ein Projekt von Rasmus Lerdorf aus dem Jahr 1994 zurück. Damals wurde eine Sammlung von Skripten unter dem Namen “Personal Home Page Tools” veröffentlicht.
https://www.php.net/manual/en/history.php.php
Derzeit (Stand Jänner 2025) ist die Version PHP 8.4 aktuell.
Web-Application Stack
PHP Anwendungen laufen üblicherweise in einer Umgebung mit Linux, Apache und MySQL (“LAMP-Stack”) oder Linux, Nginx und MySQL (“LEMP-Stack”). Der LAMP/LEMP-Stack enthält dabei alle Bestandteile, den eine Web-Anwendung benötigt: Betriebssystem, Webserver, Skript-Interpreter und Datenbank.
Betriebssystem: Linux
Webserver: Apache oder Nginx
Skript-Interpreter: PHP
Datenbank: MySQL
PHP kann aber auch unter Windows als auch MacOS nativ laufen.
Lokale Entwicklung
Damit eine PHP Anwendung lokal (auf dem Notebook) entwickelt werden kann, benötigt man eine lauffähige Umgebung entsprechend dem LAMP oder LEMP-Stack.
Folgende Möglichkeiten gibt es:
Nativ:
- Webserver, PHP und Datenbank laufen auf dem nativen Betriebssystem
Virtualisierte Umgebung:
- Webserver, PHP und Datenbank laufen innerhalb einer eigenen virtuellen Maschine (zB VirtualBox)
- Webserver, PHP und Datenbank laufen als containerisierte Umgebung (Docker)
Es gibt eine Vielzahl an Vorlagen für virtuelle Entwicklungsmaschinen oder Container-Umgebungen.
Eine, der bekanntesten und populärsten Umgebungen ist ddev.
Damit können Web-Projekte schnell und einfach lokal lauffähig gemacht werden.
- DDEV installieren
- ddev config
➜ playground mkdir mywebdevproject
➜ playground cd mywebdevproject
➜ mywebdevproject ddev config
Creating a new DDEV project config in the current directory (/home/annavoelkl/playground/mywebdevproject)
Once completed, your configuration will be written to /home/annavoelkl/playground/mywebdevproject/.ddev/config.yaml
Project name (mywebdevproject):
The docroot is the directory from which your site is served.
This is a relative path from your project root at /home/annavoelkl/playground/mywebdevproject
You may leave this value blank if your site files are in the project root
Docroot Location (current directory):
Found a php codebase at /home/annavoelkl/playground/mywebdevproject.
Project Type [backdrop, cakephp, craftcms, django4, drupal, drupal6, drupal7, laravel, magento, magento2, php, python, shopware6, silverstripe, typo3, wordpress] (php): php
Configuration complete. You may now run 'ddev start'.
- DDEV Projekt starten: ddev start
- Die Container werden automatisch heruntergeladen und gestartet
- Projekt aufrufen https://mywebdevproject.ddev.site
- Noch gibt es hier nichts zu sehen
Das erste Programm
Quelle: https://w3techs.com/technologies/overview/programming_language
helloworld.php
<!DOCTYPE html> <html> <head> <title>FernFH - Web Development</title> </head> <body> <?php echo "Hallo Welt!"; ?> </body> </html> |
Grundlagen
Variablen
Variablen werden in PHP durch ein Dollar-Zeichen ($) gefolgt vom Namen der Variable dargestellt. Bei Variablennamen wird zwischen Groß- und Kleinschreibung unterschieden (case-sensitive).
Ein gültiger Variablenname beginnt mit einem Buchstaben (A-Z, a-z oder die Bytes von 128 bis 255) oder einem Unterstrich ("_"), gefolgt von einer beliebigen Anzahl von Buchstaben, Zahlen oder Unterstrichen. Als regulärer Ausdruck (Regular Expression) würde das wie folgt ausgedrückt: ^[a-zA-Z_\x80-\xff][a-zA-Z0-9_\x80-\xff]*$
Der Geltungsbereich einer Variablen ergibt sich aus dem Zusammenhang, in dem sie definiert wurde. PHP hat einen Funktionsbereich und einen globalen Bereich. Jede Variable, die außerhalb einer Funktion definiert wird, ist auf den globalen Bereich beschränkt. Wenn eine Datei eingebunden wird, erbt der darin enthaltene Code den Variablenbereich der Zeile, in der die Einbindung erfolgt.
Kontrollstrukturen
Verfügbare Kontrollstrukturen in PHP sind:
- if
- else
- elseif/else if
- while
- do-while
- for
- foreach
- break / continue
- switch / match
- declare
- return
- require / include
- require_once / include_once
- goto
Die echo-Anweisung in PHP
Die echo-Anweisung ist ein fundamentales Sprachkonstrukt in PHP, das verwendet wird, um eine oder mehrere Ausdrücke auszugeben.3 Im Gegensatz zu Funktionen wie print() erzeugt echo keinen Rückgabewert und gilt daher als effizienter für die unmittelbare Ausgabe von Text.3 Die grundlegende Syntax von echo kann in verschiedenen Formen auftreten, wobei die gebräuchlichsten echo string1, string2,..., stringN; oder echo(string...$expressions): void sind.3 Da echo ein Sprachkonstrukt und keine eigentliche Funktion ist, können die Klammern nach dem Schlüsselwort oft weggelassen werden.3
Die Ausgabe von einfachem Text mit echo ist denkbar einfach. Strings können entweder in einfache (') oder doppelte (") Anführungszeichen eingeschlossen werden.3 Beispielsweise würde der Code echo 'Hallo Welt!'; oder echo "PHP ist toll!"; den jeweiligen Text direkt im Webbrowser des Nutzers anzeigen.3
Ebenso unkompliziert ist die Ausgabe von Variablenwerten. Hat man eine Variable deklariert und ihr einen Wert zugewiesen, kann dieser Wert mit echo ausgegeben werden. Ein einfaches Beispiel wäre: $name = "Peter"; echo $name;. Dieser Code würde den Wert der Variablen $name, also "Peter", ausgeben.3 Die direkte Ausgabe von Variablen mit echo ist ein Kernbestandteil der dynamischen Inhaltsgenerierung in PHP, da es ermöglicht, Daten, die im PHP-Code verarbeitet werden, auf der Webseite anzuzeigen.
Obwohl echo die primäre Methode zur Ausgabe in PHP ist, gibt es eine ähnliche Anweisung namens print. print erfüllt einen ähnlichen Zweck, nämlich die Ausgabe von Text, unterscheidet sich aber in einigen wesentlichen Punkten von echo.4 Ein wesentlicher Unterschied ist, dass print immer einen Integer-Wert von 1 zurückgibt, während echo keinen Rückgabewert besitzt.4 Dies macht print in bestimmten Situationen nützlich, in denen ein Rückgabewert innerhalb eines Ausdrucks benötigt wird. Ein weiterer Unterschied besteht darin, dass print nur ein einzelnes Argument (einen einzelnen String) akzeptieren kann, während echo mehrere durch Kommas getrennte Argumente verarbeiten kann.4 In Bezug auf die Geschwindigkeit wird echo im Allgemeinen als etwas schneller als print angesehen. Die folgende Tabelle fasst die Hauptunterschiede zwischen echo und print zusammen:
Feature |
echo |
|
Geschwindigkeit |
Schneller |
Langsamer |
Rückgabewert |
Keiner |
1 (Integer) |
Mehrere Argumente |
Ja |
Nein |
In den meisten Fällen wird echo aufgrund seiner höheren Geschwindigkeit und der Möglichkeit, mehrere Argumente zu verarbeiten, bevorzugt. print kann jedoch in Situationen sinnvoll sein, in denen der Rückgabewert von 1 in einem Ausdruck verwendet werden soll.
Kombinierte Ausgabe von Text und Variablen
In der praktischen Webentwicklung ist es oft notwendig, statischen Text mit dynamischen Variablenwerten zu kombinieren, um informative und personalisierte Ausgaben zu erzeugen. PHP bietet hierfür verschiedene Methoden an. Eine gängige Methode ist die Verwendung des Verkettungsoperators, der in PHP durch einen Punkt (.) dargestellt wird.3 Dieser Operator erlaubt es, mehrere Strings und Variablen miteinander zu verbinden, um einen einzigen Ausgabestring zu bilden. Ein typisches Beispiel hierfür wäre:
$begruessung = "Hallo";<br>$name = "Peter";<br>echo $begruessung. ", ". $name. "!";<br><br>
In diesem Beispiel werden die Variable $begruessung, ein Komma mit einem Leerzeichen als String und die Variable $name sowie ein Ausrufezeichen als String durch den Punkt-Operator miteinander verkettet und anschließend mit echo ausgegeben. Diese Methode bietet eine klare und explizite Möglichkeit, verschiedene Teile einer Ausgabe zusammenzufügen und ermöglicht eine präzise Kontrolle über die Formatierung.
Eine weitere sehr praktische Methode zur kombinierten Ausgabe von Text und Variablen ist die direkte Einbettung von Variablen in doppelt-Anführungszeichen.4 Innerhalb eines Strings, der in doppelten Anführungszeichen steht, erkennt PHP Variablennamen und ersetzt diese automatisch durch ihre entsprechenden Werte. Das obige Beispiel könnte also auch wie folgt geschrieben werden:
PHP
$name = "PHP";
echo "Ich liebe $name!";
Hier wird die Variable $name direkt in den String eingebettet, und PHP sorgt dafür, dass bei der Ausgabe anstelle von $name der Wert der Variablen, also "PHP", eingesetzt wird. Diese Syntax ist oft lesbarer und weniger umständlich als die Verwendung des Verkettungsoperators, insbesondere wenn mehrere Variablen in einen längeren Text eingebettet werden sollen.
Es ist wichtig zu beachten, dass die direkte Variablenersetzung nur innerhalb von doppelt-Anführungszeichen funktioniert. Bei Strings, die in einfachen Anführungszeichen stehen, werden Variablennamen als reiner Text behandelt und nicht durch ihre Werte ersetzt.4
In Fällen, in denen der Variablenname direkt an anderen Text anschließt und es zu einer Mehrdeutigkeit kommen könnte, bietet PHP die Möglichkeit, die Variable in geschweifte Klammern zu setzen.8 Dies hilft dem PHP-Interpreter, den Variablennamen eindeutig zu identifizieren. Ein Beispiel hierfür wäre:
PHP
$version = 7;
echo "PHP {$version} ist super!";
Hier stellen die geschweiften Klammern um $version sicher, dass PHP die Variable korrekt erkennt und nicht versucht, eine Variable namens $version ist zu finden.
Zusätzlich zu diesen Methoden bietet PHP eine Kurzschreibweise für die echo-Anweisung, die besonders in HTML-Templates nützlich ist. Die Syntax <?= Ausdruck?> ist eine verkürzte Form von <?php echo Ausdruck;?>.3 Sie ermöglicht es, den Wert einer Variablen oder eines Ausdrucks direkt in den HTML-Code einzufügen, ohne die vollständigen PHP-Tags verwenden zu müssen. Ein Beispiel hierfür wäre:
PHP
$value = 10;
?>
Der Wert ist: <?= $value?>.
Diese Kurzschreibweise trägt zu einem aufgeräumteren Code bei, insbesondere wenn es darum geht, dynamische Inhalte in HTML-Strukturen darzustellen.
Weitere wichtige PHP-Funktionen für den Einstieg
Über die echo-Anweisung hinaus gibt es eine Reihe weiterer PHP-Funktionen, die für Anfänger von großer Bedeutung sind, um grundlegende Programmieraufgaben zu bewältigen.
Die Funktionen isset() und empty() spielen eine zentrale Rolle bei der Überprüfung von Variablen.9 isset($variable) prüft, ob eine Variable deklariert wurde und einen anderen Wert als null besitzt. Dies ist besonders wichtig bei der Verarbeitung von Formulardaten, um sicherzustellen, dass ein Feld tatsächlich übermittelt wurde, oder um zu vermeiden, dass auf nicht definierte Variablen zugegriffen wird, was zu Fehlern führen könnte. Im Gegensatz dazu überprüft empty($variable), ob eine Variable als "leer" betrachtet wird. Dies ist der Fall, wenn die Variable nicht gesetzt ist, den Wert null, 0, einen leeren String (""), false oder ein leeres Array besitzt. empty() ist daher sehr nützlich für die Validierung von Benutzereingaben, um beispielsweise sicherzustellen, dass Pflichtfelder ausgefüllt wurden.
Die Funktion count() ist unerlässlich, wenn man mit Arrays arbeitet.9 Sie gibt die Anzahl der Elemente zurück, die sich in einem Array befinden. Dies ist häufig notwendig, um Schleifen zu steuern, beispielsweise um alle Elemente eines Arrays zu verarbeiten, oder um die Größe einer Datensammlung zu ermitteln.
Obwohl nicht explizit in allen Top-Funktionen-Listen erwähnt, sind strlen() und trim() grundlegende Funktionen für die Arbeit mit Strings. strlen("Hallo") gibt die Länge des Strings zurück, in diesem Fall 5. Dies ist wichtig für die Validierung von Texteingaben, beispielsweise um sicherzustellen, dass ein Passwort eine bestimmte Mindestlänge hat. trim(" Text mit Leerzeichen ") entfernt Leerzeichen und andere Whitespace-Zeichen am Anfang und Ende eines Strings und gibt den bereinigten String zurück. Dies ist besonders nützlich, um Benutzereingaben zu normalisieren und unerwünschte Leerzeichen zu entfernen, die zu Fehlern führen könnten.
Für die Verarbeitung von Strings, die in Arrays umgewandelt oder aus Arrays zusammengesetzt werden müssen, sind explode() und implode() sehr hilfreich.9 explode(delimiter, string) teilt einen String anhand eines angegebenen Trennzeichens in ein Array von Substrings auf. Dies ist beispielsweise nützlich, um eine durch Kommas getrennte Liste in einzelne Werte zu zerlegen. Umgekehrt verbindet implode(glue, array) die Elemente eines Arrays zu einem einzigen String, wobei optional ein Trennzeichen (glue) zwischen den Elementen eingefügt werden kann. Dies ist praktisch, um beispielsweise eine Liste von Wörtern in einem Array zu einem Satz zusammenzufügen.
PHP Arrays: Grundlagen und Erstellung
Ein Array in PHP ist eine strukturierte Datensammlung, die es ermöglicht, mehrere Werte unter einem einzigen Namen zu speichern und zu verwalten.14 Tatsächlich kann ein PHP-Array als eine geordnete Map betrachtet werden, die Werte mit Schlüsseln assoziiert.16 Diese Struktur ist äußerst vielseitig und kann in PHP als herkömmliches Array, als Liste (Vektor), als Hashtabelle, als Dictionary, als Collection, als Stack oder als Queue fungieren.15 Diese Flexibilität macht Arrays zu einem unverzichtbaren Werkzeug in der PHP-Programmierung.
Grundsätzlich unterscheidet man in PHP zwischen zwei Haupttypen von Arrays: indizierte Arrays und assoziative Arrays.14 Indizierte Arrays verwenden numerische Indizes, um auf die einzelnen Werte im Array zuzugreifen. Diese Indizes beginnen in PHP traditionell bei 0 für das erste Element und werden für jedes weitere Element fortlaufend um eins erhöht.14 Assoziative Arrays hingegen verwenden benannte Schlüssel (die entweder Strings oder Integers sein können), um die in ihnen gespeicherten Werte zu identifizieren und abzurufen.14 Dies ermöglicht es, Daten anhand von aussagekräftigen Bezeichnungen zu speichern und zu verwalten, was die Lesbarkeit und Wartbarkeit des Codes verbessern kann.
Numerisch indizierte Arrays können auf verschiedene Weisen erstellt werden. Eine traditionelle Methode ist die Verwendung der array()-Sprachkonstruktion.14 Dabei werden die gewünschten Werte als durch Kommas getrennte Argumente an array() übergeben:
PHP
$farben = array("rot", "grün", "blau");
Seit PHP Version 5.4 gibt es eine kürzere und oft bevorzugte Syntax zur Erstellung von Arrays, die als Short Array Syntax bekannt ist. Hierbei werden die Array-Elemente einfach in eckige Klammern `` eingeschlossen 15:
PHP
$zahlen = [1, 2, 3];
Beide Methoden führen zum gleichen Ergebnis: einem indizierten Array, bei dem "rot" den Index 0, "grün" den Index 1 und "blau" den Index 2 hat, bzw. bei $zahlen entsprechend 1, 2 und 3.
Assoziative Arrays werden ebenfalls mit array() oder der Kurzschreibweise `` erstellt, wobei hier die Schlüssel und Wertepaare mit dem Operator => verbunden werden 14:
PHP
$alter = array("Peter" => 35, "Lisa" => 32);
$noten =;
In diesen Beispielen sind "Peter" und "Lisa" bzw. "John" und "Sally" die Schlüssel, und 35, 32, 91 und 94 die zugehörigen Werte. Assoziative Arrays eignen sich besonders gut, um Datensätze zu repräsentieren, bei denen jedes Element eine eindeutige Bezeichnung hat, wie beispielsweise Benutzerinformationen oder Konfigurationseinstellungen.
PHP Arrays: Verwendung und Zugriff auf Elemente
Der Zugriff auf die Elemente eines PHP-Arrays erfolgt über ihren numerischen Index (bei indizierten Arrays) oder ihren benannten Schlüssel (bei assoziativen Arrays). Die Syntax hierfür ist in beiden Fällen die gleiche: dem Array-Namen folgen eckige Klammern, in denen der gewünschte Index oder Schlüssel angegeben wird.14
Bei einem numerisch indizierten Array wie $farben = ["rot", "grün", "blau"]; kann auf das erste Element ("rot") mit $farben, auf das zweite Element ("grün") mit $farben1 und auf das dritte Element ("blau") mit $farben2 zugegriffen werden.14
Bei einem assoziativen Array wie $alter = ["Peter" => 35, "Lisa" => 32]; kann auf das Alter von Peter mit $alter["Peter"] (was 35 zurückgibt) und auf das Alter von Lisa mit $alter["Lisa"] (was 32 zurückgibt) zugegriffen werden.14
PHP-Arrays sind dynamisch, was bedeutet, dass ihre Elemente nach der Erstellung geändert werden können. Um den Wert eines vorhandenen Array-Elements zu ändern, weist man dem entsprechenden Index oder Schlüssel einfach einen neuen Wert zu 17:
PHP
$farben = "gelb"; // Das erste Element von $farben ist nun "gelb"
$alter["Peter"] = 36; // Das Alter von Peter in $alter ist nun 36
Ebenso einfach ist das Hinzufügen neuer Elemente zu einem Array. Bei einem numerisch indizierten Array kann ein neues Element am Ende hinzugefügt werden, indem man dem Array-Namen leere eckige Klammern `` folgen lässt und dann den zuzuweisenden Wert angibt 14:
PHP
$zahlen = [1, 2, 3];
$zahlen = 4; // Das Array $zahlen enthält nun [1, 2, 3, 4]
Bei einem assoziativen Array fügt man ein neues Schlüssel-Wert-Paar hinzu, indem man einen neuen Schlüssel in den eckigen Klammern angibt und ihm einen Wert zuweist 17:
PHP
$noten =;
$noten = 88; // Das Array $noten enthält nun
Diese Flexibilität bei der Verwendung und Modifikation von Array-Elementen macht PHP-Arrays zu einem mächtigen Werkzeug für die Datenverwaltung.
PHP Arrays: Durchlaufen und Ausgeben
Um alle Elemente eines Arrays zu verarbeiten oder auszugeben, ist es notwendig, das Array zu durchlaufen. PHP bietet hierfür verschiedene Schleifenkonstrukte an.
Für numerisch indizierte Arrays, bei denen die Schlüssel fortlaufende Integer-Werte sind, kann die traditionelle for-Schleife verwendet werden.19 Dabei wird ein Zähler initialisiert, der so lange inkrementiert wird, bis er die Anzahl der Array-Elemente erreicht hat. Innerhalb der Schleife kann dann über den aktuellen Wert des Zählers als Index auf das jeweilige Array-Element zugegriffen werden. Ein Beispiel hierfür wäre:
PHP
$farben = ["rot", "grün", "blau"];
for ($i = 0; $i < count($farben); $i++) {
echo $farben[$i]. " ";
}
// Ausgabe: rot grün blau
Obwohl die for-Schleife für indizierte Arrays funktioniert, ist die foreach-Schleife in PHP die vielseitigere und empfohlene Methode, um Arrays jeglicher Art zu durchlaufen, sowohl indizierte als auch assoziative.19 Die foreach-Schleife bietet zwei Hauptsyntaxformen. Die erste ermöglicht den direkten Zugriff auf die Werte des Arrays:
PHP
foreach ($array as $value) {
// Code, der mit jedem Wert des Arrays ausgeführt wird
}
Die zweite Form erlaubt den Zugriff sowohl auf den Schlüssel als auch auf den Wert jedes Elements:
PHP
foreach ($array as $key => $value) {
// Code, der mit jedem Schlüssel-Wert-Paar des Arrays ausgeführt wird
}
Ein Beispiel für die Verwendung von foreach mit einem assoziativen Array wäre:
PHP
$alter = ["Peter" => 35, "Lisa" => 32];
foreach ($alter as $name => $jahr) {
echo $name. ": ". $jahr. "<br>";
}
// Ausgabe:
// Peter: 35
// Lisa: 32
Für Entwicklungs- und Debugging-Zwecke ist es oft nützlich, den gesamten Inhalt eines Arrays auf einmal auszugeben. PHP bietet hierfür die Funktion print_r() an.9 print_r($array) gibt eine für Menschen lesbare Darstellung der Struktur und der Werte des Arrays aus. Bei komplexen oder mehrdimensionalen Arrays ist dies besonders hilfreich, um den Überblick zu behalten. Oft wird die Ausgabe von print_r() in <pre>-Tags eingeschlossen, um die Formatierung im Browser zu verbessern.24
Eine weitere Funktion zur Ausgabe von Array-Inhalten ist var_dump().23 Im Gegensatz zu print_r() liefert var_dump() detailliertere Informationen über die Array-Elemente, einschließlich ihres Datentyps und ihrer Länge. Auch var_dump() wird primär für Debugging-Zwecke verwendet, wenn es darum geht, die genaue Beschaffenheit der in einem Array gespeicherten Daten zu untersuchen.
Wichtige PHP Array-Funktionen
PHP bietet eine Vielzahl von Funktionen, die speziell für die Arbeit mit Arrays entwickelt wurden und die Manipulation und Verarbeitung von Array-Daten erheblich erleichtern.
Es gibt Funktionen, um Elemente zu einem Array hinzuzufügen oder daraus zu entfernen. array_push($array, $value1, $value2,...) fügt ein oder mehrere Elemente am Ende eines Arrays hinzu.14 array_pop($array) entfernt das letzte Element aus einem Array und gibt es zurück.14 Um Elemente am Anfang eines Arrays zu bearbeiten, gibt es array_shift($array), das das erste Element entfernt und zurückgibt 17, und array_unshift($array, $value1, $value2,...), das ein oder mehrere Elemente am Anfang des Arrays einfügt.17
Für das Zusammenführen von Arrays steht die Funktion array_merge($array1, $array2,...) zur Verfügung, die zwei oder mehr Arrays zu einem neuen Array kombiniert.9 Dabei ist zu beachten, dass numerische Schlüssel neu indiziert werden, während gleichnamige String-Schlüssel durch die Werte des später genannten Arrays überschrieben werden.
Um die Schlüssel oder die Werte eines Arrays zu erhalten, können die Funktionen array_keys($array) 11 und array_values($array) 11 verwendet werden. array_keys() gibt ein Array mit allen Schlüsseln des übergebenen Arrays zurück, während array_values() ein Array mit allen Werten in der Reihenfolge ihrer Indizes erzeugt.
Zum Suchen innerhalb von Arrays gibt es in_array($needle, $haystack), das prüft, ob ein bestimmter Wert ($needle) in einem Array ($haystack) vorhanden ist 9, und array_search($needle, $haystack), das nach einem Wert sucht und den entsprechenden Schlüssel zurückgibt, falls der Wert gefunden wird.27
Weitere nützliche Array-Funktionen sind array_unique($array), das doppelte Werte aus einem Array entfernt 11, array_filter($array, $callback), das Elemente eines Arrays anhand einer benutzerdefinierten Callback-Funktion filtert 11, und array_map($callback, $array), das eine benutzerdefinierte Callback-Funktion auf jedes Element eines Arrays anwendet und ein neues Array mit den Ergebnissen zurückgibt.11
Die folgende Tabelle fasst einige der wichtigsten PHP Array-Funktionen zusammen:
Funktion |
Beschreibung |
array_push() |
Fügt ein oder mehrere Elemente am Ende eines Arrays hinzu. |
array_pop() |
Entfernt und gibt das letzte Element eines Arrays zurück. |
array_shift() |
Entfernt und gibt das erste Element eines Arrays zurück. |
array_unshift() |
Fügt ein oder mehrere Elemente am Anfang eines Arrays hinzu. |
array_merge() |
Vereinigt ein oder mehrere Arrays zu einem neuen Array. |
array_keys() |
Gibt alle oder einen Teil der Schlüssel eines Arrays zurück. |
array_values() |
Gibt alle Werte eines Arrays mit numerischer Indizierung zurück. |
in_array() |
Prüft, ob ein Wert im Array vorhanden ist. |
array_search() |
Sucht nach einem Wert im Array und gibt den entsprechenden Schlüssel zurück. |
array_unique() |
Entfernt doppelte Werte aus einem Array. |
array_filter() |
Filtert Elemente eines Arrays mithilfe einer Callback-Funktion. |
array_map() |
Wendet eine Callback-Funktion auf jedes Element eines Arrays an. |
Gibt die Lebensdauer einer PHP-Session in Sekunden an. Nach Ablauf dieser Zeit wird die Session gelöscht.
=== Standardwert: === *1440 Sekunden (24 Minuten) === Beispiel: ===
session.gc_maxlifetime = 3600
=== Empfehlung: === *Erhöhen Sie den Wert, wenn Benutzer länger eingeloggt bleiben sollen. *Passen Sie den Wert an die Anforderungen Ihrer Anwendung an.
=== Mailversand === === Passwort-Hashing ===
Sicheres Hashing von Passwörtern
https://www.php.net/manual/de/faq.passwords.php
=== Dateioperationen ===
https://www.php.net/manual/de/ref.filesystem.php
=== URL-Aufrufe / curl ===
cURL in PHP ist eine Bibliothek, die es ermöglicht, HTTP-Anfragen von einem PHP-Skript aus an andere Server zu senden und deren Antworten zu verarbeiten. Es wird verwendet, um Daten aus externen APIs abzurufen, Dateien herunterzuladen, Formulare auf anderen Webseiten auszufüllen oder mit REST-APIs zu kommunizieren. Mit cURL kann man verschiedene Protokolle wie HTTP, HTTPS, FTP und mehr nutzen, was es zu einem flexiblen, mächtigen und wichtigen Werkzeug für den Datenaustausch zwischen Servern macht.
https://www.php.net/manual/de/ref.curl.php
<?php
// 1. cURL-Session initialisieren
$curl = curl_init();
// 2. URL der API setzen
// 3. Optionen für die cURL-Session setzen
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
// 4. Anfrage ausführen und Antwort speichern
$response = curl_exec($curl);
// 5. cURL-Session schließen
curl_close($curl);
// 6. JSON-Antwort in ein PHP-Array umwandeln
$data = json_decode($response, true);
// 7. Wetterdaten ausgeben
$currentTemp = $data['current_weather']['temperature'];
$maxTemp = $data['daily']['temperature_2m_max'][0];
$minTemp = $data['daily']['temperature_2m_min'][0];
echo "Aktuelle Temperatur: " . $currentTemp . "°C\n";
echo "Tageshöchsttemperatur: " . $maxTemp . "°C\n";
echo "Tagestiefsttemperatur: " . $minTemp . "°C\n";
?>
=== Erklärung der wichtigen Schritte: === #curl_init() – Initialisiert die cURL-Session. #curl_setopt() – Setzt Optionen: #*CURLOPT_URL – Die API-URL mit den Parametern. #*CURLOPT_RETURNTRANSFER – Gibt die Antwort als String zurück. #curl_exec() – Führt die Anfrage aus und speichert die Antwort. #json_decode() – Wandelt die JSON-Antwort in ein PHP-Array um. #Ausgabe der Daten – Greift auf die Temperaturdaten zu und gibt sie aus.
Beispielausgabe
Aktuelle Temperatur: 5.3°C
Tageshöchsttemperatur: 10.1°C
Tagestiefsttemperatur: 2.4°C
=== JSON ===
= Wichtige PHP-Konfigurationswerte =
Die PHP-Konfiguration beeinflusst die Funktionsweise und Performance von PHP-Anwendungen. Die Konfigurationswerte werden in der Datei php.ini festgelegt und können je nach Serverumgebung angepasst werden. Hier sind die wichtigsten Konfigurationswerte, die häufig bei der Optimierung von PHP-Anwendungen eine Rolle spielen.
Die Anpassung der PHP-Konfigurationswerte ist ein wichtiger Schritt, um die Performance und Sicherheit von Webanwendungen zu gewährleisten. Je nach Anwendungsszenario können die Werte angepasst werden, um Speicherprobleme, Zeitüberschreitungen oder Upload-Beschränkungen zu verhindern.
Die Konfiguration von PHP ist über das zentrale Konfigurationsfile php.ini möglich, beispielsweise in /etc/php/8.2/fpm Die PHP Konfiguration kann wie folgt angezeigt werden: php.ini Datei anzeigen Über die Kommandozeile (direkt auf dem Webserver): php -i Via PHP Skript: <? phpinfo(); ?> Zu beachten ist, dass einige PHP Konfigurationswerte, die in der php.ini eingetragen sind, beim Apache Webserver pro Verzeichnis mit einem .htaccess Konfigurationsfile überschreiben werden können. Bei Nginx existiert ein solches File nicht, hier muss immer die zentrale Konfiguration aktualisiert werden. === memory_limit ===
Dieser Wert legt fest, wie viel Speicher eine PHP-Skriptdatei maximal nutzen darf. Ein zu niedriger Wert kann dazu führen, dass komplexe Skripte nicht vollständig ausgeführt werden.
Standardwert: 128M (128 Megabyte)
=== Beispiel: ===
memory_limit = 256M
=== Empfehlung: === *Erhöhen Sie den Wert, wenn Ihre Anwendung viele Daten verarbeitet, z. B. bei Bildbearbeitung oder großen Datenbankabfragen. *Setzen Sie einen vernünftigen Grenzwert, um eine übermäßige Speichernutzung zu verhindern.
Was sind empfohlene Werte für memory_limit?
Anwendungstyp
|Empfehlung
|- |Kleine Website
|64M - 128M
|- |Durchschnittliche App
|256M - 512M
|- |E-Commerce (z.B. Magento, Shopware,...)
|512M - 1G+
|- |API / Backend mit vielen Daten
|512M - 2G+
|}
max_execution_time
Dieser Wert bestimmt, wie lange ein PHP-Skript maximal laufen darf, bevor es abgebrochen wird. Er wird in Sekunden angegeben.
Standardwert: 30 Sekunden
Beispiel:
max_execution_time = 60
Empfehlung:
- Für einfache Webanwendungen reicht ein niedriger Wert. *Bei rechenintensiven Prozessen (z. B. Datenmigrationen) kann es sinnvoll sein, den Wert temporär zu erhöhen.
post_max_size
Dieser Wert gibt die maximale Größe von Daten an, die per POST-Methode gesendet werden können. Er beeinflusst Formularübermittlungen und Datei-Uploads.
Standardwert: 8M (8 Megabyte)
Beispiel:
post_max_size = 20M
Empfehlung:
- Erhöhen Sie diesen Wert, wenn Ihre Anwendung große Dateien hochladen muss. *Der Wert sollte immer größer als upload_max_filesize sein.
upload_max_filesize
Dieser Wert legt die maximale Größe für hochgeladene Dateien fest.
Standardwert: 2M (2 Megabyte)
Beispiel:
upload_max_filesize = 10M
Empfehlung:
- Passen Sie diesen Wert entsprechend den Anforderungen Ihrer Anwendung an. *In Kombination mit post_max_size verwenden.
max_input_vars
Dieser Wert gibt an, wie viele Eingabevariablen (z. B. aus Formularen) ein PHP-Skript verarbeiten kann. Ein zu niedriger Wert kann dazu führen, dass große Formulare nicht korrekt verarbeitet werden.
Standardwert: 1000
Beispiel:
max_input_vars = 2000
Empfehlung:
- Erhöhen Sie diesen Wert bei großen Formularen oder umfangreichen Konfigurationsdaten. *Ein zu hoher Wert kann die Performance negativ beeinflussen.
display_errors
Legt fest, ob PHP-Fehlermeldungen direkt im Browser angezeigt werden.
Standardwert: Off (in Produktionsumgebungen)
Beispiel:
display_errors = On
Empfehlung:
- In Entwicklungsumgebungen: Aktivieren Sie diese Option, um Fehler direkt zu sehen. *In Produktionsumgebungen: Deaktivieren Sie diese Option, um sensible Informationen nicht preiszugeben.
error_reporting
Definiert, welche Arten von Fehlern gemeldet werden sollen.
Standardwert: E_ALL (zeigt alle Fehler an)
Beispiel:
error_reporting = E_ALL & ~E_NOTICE
Empfehlung:
- In Entwicklungsumgebungen: Nutzen Sie E_ALL, um alle Fehler zu sehen. *In Produktionsumgebungen: Blenden Sie unnötige Meldungen aus, z. B. mit ~E_NOTICE.
file_uploads
Legt fest, ob das Hochladen von Dateien in PHP erlaubt ist.
Standardwert: On
Beispiel:
file_uploads = On
Empfehlung:
- Aktivieren Sie diese Option, wenn Ihre Anwendung Datei-Uploads unterstützt. *Deaktivieren Sie sie, wenn keine Datei-Uploads benötigt werden, um die Sicherheit zu erhöhen.
- ↑ HTTP response status codes (https://developer.mozilla.org/en-US/docs/Web/HTTP/Status) . Sie sind in fünf Kategorien unterteilt:
1xx Informationelle Antworten
2xx Erfolgreiche Anfragen
3xx Umleitungen
4xx Clientfehler
5xx Serverfehler
Wichtige Statuscodes:
200 OK: Die Anfrage war erfolgreich. Die angeforderten Daten werden zurückgegeben.
301 Moved Permanently: Die angeforderte Ressource wurde dauerhaft an eine neue URL verschoben.
302 Found: Temporäre Weiterleitung.
404 Not Found: Die angeforderte Ressource wurde nicht gefunden.
500 Internal Server Error: Ein allgemeiner Fehler auf dem Server.
Bedeutung von HTTPS und SSL/TLS
HTTPS (Hypertext Transfer Protocol Secure)
HTTPS ist die sichere Version von HTTP. Es verwendet Verschlüsselung, um die Kommunikation zwischen Client und Server vor Abhören und Manipulation zu schützen. Die Verschlüsselung erfolgt mithilfe von SSL (Secure Sockets Layer) bzw. TLS (Transport Layer Security). Vorteile von HTTPS: Vertraulichkeit: Die übertragenen Daten sind verschlüsselt und können nicht von Dritten eingesehen werden. Integrität: Es wird sichergestellt, dass die Daten während der Übertragung nicht manipuliert wurden. Authentizität: Der Client kann sicherstellen, dass er mit dem richtigen Server kommuniziert.
==== Request-Verarbeitung ==== - ↑
=== Sessions & Cookies === ==== session.gc_maxlifetime ==== === Beschreibung: ===