Kapitel 1. Einführung in PHP
Diese Arbeit wurde mithilfe von KI übersetzt. Wir freuen uns über dein Feedback und deine Kommentare: translation-feedback@oreilly.com
PHP ist eine einfache, aber leistungsstarke Sprache, mit der du HTML-Inhalte erstellen kannst. In diesem Kapitel erfährst du alles Wissenswerte über die Sprache PHP. Es beschreibt die Natur und Geschichte von PHP, auf welchen Plattformen es läuft und wie du es konfigurierst. Am Ende des Kapitels zeige ich dir PHP in der Praxis, indem ich einige PHP-Programme durchführe, die gängige Aufgaben wie die Verarbeitung von Formulardaten, die Interaktion mit einer Datenbank und die Erstellung von Grafiken veranschaulichen.
Was macht PHP?
PHP kann in erster Linie auf zwei Arten verwendet werden:
- Server-seitige Skripterstellung
- PHP wurde ursprünglich für die Erstellung von dynamischen Webinhalten entwickelt und ist für diese Aufgabe immer noch am besten geeignet. Um HTML zu erzeugen, brauchst du den PHP-Parser und einen Webserver, über den du die codierten Dokumentdateien senden kannst. Mittlerweile ist PHP aber auch für die Erstellung dynamischer Inhalte über Datenbankverbindungen, XML-Dokumente, Grafiken, PDF-Dateien und vieles mehr beliebt.
- Kommandozeilen-Scripting
- PHP kann Skripte über die Kommandozeile ausführen, ähnlich wie Perl, awk oder die Unix-Shell. Du kannst die Kommandozeilenskripte für Aufgaben der Systemadministration verwenden, z. B. für Backups und das Parsen von Logs. Auch einige Skripte vom Typ CRON-Job können auf diese Weise ausgeführt werden (als nicht sichtbare PHP-Aufgaben).
In diesem Buch konzentrieren wir uns jedoch auf den ersten Punkt: die Verwendung von PHP zur Entwicklung dynamischer Webinhalte.
PHP läuft auf allen wichtigen Betriebssystemen, von Unix-Varianten (einschließlich Linux, FreeBSD, Ubuntu, Debian und Solaris) bis zu Windows und macOS. Es kann mit allen führenden Webservern verwendet werden, darunter Apache, Nginx und OpenBSD, um nur einige zu nennen; sogar Cloud-Umgebungen wie Azure und Amazon sind auf dem Vormarsch.
Die Sprache selbst ist extrem flexibel. Du bist zum Beispiel nicht darauf beschränkt, nur HTML- oder andere Textdateien auszugeben - du kannst jedes beliebige Dokumentformat erzeugen. PHP bietet integrierte Unterstützung für die Erstellung von PDF-Dateien und GIF-, JPEG- und PNG-Bildern.
Eine der wichtigsten Funktionen von PHP ist die weitreichende Unterstützung von Datenbanken. PHP unterstützt alle wichtigen Datenbanken (einschließlich MySQL, PostgreSQL, Oracle, Sybase, MS-SQL, DB2 und ODBC-kompatible Datenbanken) und sogar viele unbekannte Datenbanken. Sogar die neueren NoSQL-Datenbanken wie CouchDB und MongoDB werden unterstützt. Mit PHP ist es bemerkenswert einfach, Webseiten mit dynamischen Inhalten aus einer Datenbank zu erstellen.
Schließlich stellt PHP mit dem PHP Extension and Application Repository (PEAR) eine Bibliothek mit PHP-Code zur Verfügung, um gängige Aufgaben wie die Abstraktion von Datenbanken, Fehlerbehandlung usw. zu erledigen. PEAR ist ein Framework und Verteilungssystem für wiederverwendbare PHP-Komponenten.
Eine kurze Geschichte von PHP
Rasmus Lerdorf entwickelte PHP zum ersten Mal im Jahr 1994, aber das PHP, das heute verwendet wird, unterscheidet sich stark von der ursprünglichen Version. Um zu verstehen, wie PHP dorthin gekommen ist, wo es heute steht, ist es hilfreich, die historische Entwicklung der Sprache zu kennen. Hier ist diese Geschichte, mit vielen Kommentaren und E-Mails von Rasmus selbst.
Die Entwicklung von PHP
Hier ist die PHP 1.0 Ankündigung, die im Juni 1995 in der Usenet Newsgroup(comp.infosystems.www.authoring.cgi) veröffentlicht wurde:
From: rasmus@io.org (Rasmus Lerdorf) Subject: Announce: Personal Home Page Tools (PHP Tools) Date: 1995/06/08 Message-ID: <3r7pgp$aa1@ionews.io.org>#1/1 organization: none newsgroups: comp.infosystems.www.authoring.cgi Announcing the Personal Home Page Tools (PHP Tools) version 1.0. These tools are a set of small tight cgi binaries written in C. They perform a number of functions including: . Logging accesses to your pages in your own private log files . Real-time viewing of log information . Providing a nice interface to this log information . Displaying last access information right on your pages . Full daily and total access counters . Banning access to users based on their domain . Password protecting pages based on users' domains . Tracking accesses ** based on users' e-mail addresses ** . Tracking referring URL's - HTTP_REFERER support . Performing server-side includes without needing server support for it . Ability to not log accesses from certain domains (ie. your own) . Easily create and display forms . Ability to use form information in following documents Here is what you don't need to use these tools: . You do not need root access - install in your ~/public_html dir . You do not need server-side includes enabled in your server . You do not need access to Perl or Tcl or any other script interpreter . You do not need access to the httpd log files The only requirement for these tools to work is that you have the ability to execute your own cgi programs. Ask your system administrator if you are not sure what this means. The tools also allow you to implement a guestbook or any other form that needs to write information and display it to users later in about 2 minutes. The tools are in the public domain distributed under the GNU Public License. Yes, that means they are free! For a complete demonstration of these tools, point your browser at: http://www.io.org/~rasmus -- Rasmus Lerdorf rasmus@io.org http://www.io.org/~rasmus
Beachte, dass die URL und die E-Mail-Adresse, die in dieser Nachricht angegeben sind, längst verschwunden sind. Die Sprache dieser Ankündigung spiegelt die Anliegen wider, die die Menschen damals hatten, z. B. den Passwortschutz von Seiten, die einfache Erstellung von Formularen und den Zugriff auf Formulardaten auf Folgeseiten. Die Ankündigung verdeutlicht auch die anfängliche Positionierung von PHP als Framework für eine Reihe nützlicher Tools.
In der Ankündigung ist nur von den Tools die Rede, die mit PHP geliefert werden, aber hinter den Kulissen war es das Ziel, ein Framework zu schaffen, das es einfach macht, PHP zu erweitern und weitere Tools hinzuzufügen. Die Geschäftslogik für diese Add-ons wurde in C geschrieben; ein einfacher Parser suchte sich Tags aus dem HTML heraus und rief die verschiedenen C-Funktionen auf. Es war nie wirklich Teil des Plans, eine Skriptsprache zu entwickeln.
Was ist also passiert?
Rasmus begann an einem ziemlich großen Projekt für die Universität von Toronto zu arbeiten, bei dem ein Tool benötigt wurde, das Daten von verschiedenen Stellen zusammenführt und eine schöne webbasierte Verwaltungsoberfläche präsentiert. Natürlich nutzte er PHP für diese Aufgabe, aber aus Leistungsgründen mussten die verschiedenen kleinen Tools von PHP 1.0 besser zusammengeführt und in den Webserver integriert werden.
Ursprünglich wurden einige Hacks am NCSA-Webserver vorgenommen, um ihn so zu patchen, dass er die PHP-Kernfunktionen unterstützt. Das Problem bei diesem Ansatz war, dass du als Benutzer deine Webserver-Software durch diese spezielle, gehackte Version ersetzen musstest. Glücklicherweise gewann Apache zu dieser Zeit an Bedeutung und die Apache-API machte es einfacher, Funktionen wie PHP zum Server hinzuzufügen.
Im Laufe des nächsten Jahres hat sich viel getan und der Schwerpunkt hat sich ziemlich verändert. Hier ist die PHP 2.0 (PHP/FI) Ankündigung, die im April 1996 verschickt wurde:
From: rasmus@madhaus.utcs.utoronto.ca (Rasmus Lerdorf) Subject: ANNOUNCE: PHP/FI Server-side HTML-Embedded Scripting Language Date: 1996/04/16 Newsgroups: comp.infosystems.www.authoring.cgi PHP/FI is a server-side HTML embedded scripting language. It has built-in access logging and access restriction features and also support for embedded SQL queries to mSQL and/or Postgres95 backend databases. It is most likely the fastest and simplest tool available for creating database-enabled web sites. It will work with any UNIX-based web server on every UNIX flavour out there. The package is completely free of charge for all uses including commercial. Feature List: . Access Logging Log every hit to your pages in either a dbm or an mSQL database. Having hit information in a database format makes later analysis easier. . Access Restriction Password protect your pages, or restrict access based on the refering URL plus many other options. . mSQL Support Embed mSQL queries right in your HTML source files . Postgres95 Support Embed Postgres95 queries right in your HTML source files . DBM Support DB, DBM, NDBM and GDBM are all supported . RFC-1867 File Upload Support Create file upload forms . Variables, Arrays, Associative Arrays . User-Defined Functions with static variables + recursion . Conditionals and While loops Writing conditional dynamic web pages could not be easier than with the PHP/FI conditionals and looping support . Extended Regular Expressions Powerful string manipulation support through full regexp support . Raw HTTP Header Control Lets you send customized HTTP headers to the browser for advanced features such as cookies. . Dynamic GIF Image Creation Thomas Boutell's GD library is supported through an easy-to-use set of tags. It can be downloaded from the File Archive at: <URL:http://www.vex.net/php> -- Rasmus Lerdorf rasmus@vex.net
Dies war das erste Mal, dass der Begriff scripting language verwendet wurde. Der einfache Tag-Ersetzungscode von PHP 1.0 wurde durch einen Parser ersetzt, der mit einer anspruchsvolleren eingebetteten Tag-Sprache umgehen konnte. Nach heutigen Maßstäben war die Tag-Sprache nicht besonders anspruchsvoll, aber im Vergleich zu PHP 1.0 war sie es auf jeden Fall.
Der Hauptgrund für diese Änderung war, dass nur wenige Nutzer von PHP 1.0 daran interessiert waren, das C-basierte Framework für die Erstellung von Add-ons zu verwenden. Die meisten Nutzer waren viel mehr daran interessiert, Logik direkt in ihre Webseiten einzubetten, um bedingtes HTML, benutzerdefinierte Tags und andere Funktionen zu erstellen. PHP 1.0-Benutzer wünschten sich immer wieder die Möglichkeit, die Fußzeile mit Hit-Tracking hinzuzufügen oder verschiedene HTML-Blöcke bedingt zu senden. Dies führte zur Erstellung eines if
Tags. Wenn du if
hast, brauchst du auch else
, und von da an geht es steil bergab, bis du, ob du willst oder nicht, eine ganze Skriptsprache schreibst.
Mitte 1997 war die PHP-Version 2.0 ziemlich gewachsen und hatte viele Nutzer angezogen, aber es gab immer noch einige Stabilitätsprobleme mit der zugrunde liegenden Parsing-Engine. Außerdem war das Projekt immer noch größtenteils eine Ein-Mann-Arbeit, mit ein paar Beiträgen hier und da. Zu diesem Zeitpunkt meldeten sich Zeev Suraski und Andi Gutmans in Tel Aviv, Israel, freiwillig, um die zugrundeliegende Parsing-Engine neu zu schreiben, und wir stimmten zu, ihre Neufassung zur Grundlage für PHP Version 3.0 zu machen. Weitere Personen meldeten sich freiwillig, um an anderen Teilen von PHP zu arbeiten, und das Projekt wurde von einem Ein-Mann-Projekt mit einigen wenigen Mitwirkenden zu einem echten Open-Source-Projekt mit vielen Entwicklern auf der ganzen Welt.
Hier ist die Ankündigung von PHP 3.0 vom Juni 1998:
June 6, 1998 -- The PHP Development Team announced the release of PHP 3.0, the latest release of the server-side scripting solution already in use on over 70,000 World Wide Web sites. This all-new version of the popular scripting language includes support for all major operating systems (Windows 95/NT, most versions of Unix, and Macintosh) and web servers (including Apache, Netscape servers, WebSite Pro, and Microsoft Internet Information Server). PHP 3.0 also supports a wide range of databases, including Oracle, Sybase, Solid, MySQ, mSQL, and PostgreSQL, as well as ODBC data sources. New features include persistent database connections, support for the SNMP and IMAP protocols, and a revamped C API for extending the language with new features. "PHP is a very programmer-friendly scripting language suitable for people with little or no programming experience as well as the seasoned web developer who needs to get things done quickly. The best thing about PHP is that you get results quickly," said Rasmus Lerdorf, one of the developers of the language. "Version 3 provides a much more powerful, reliable, and efficient implementation of the language, while maintaining the ease of use and rapid development that were the key to PHP's success in the past," added Andi Gutmans, one of the implementors of the new language core. "At Circle Net we have found PHP to be the most robust platform for rapid web-based application development available today," said Troy Cobb, Chief Technology Officer at Circle Net, Inc. "Our use of PHP has cut our development time in half, and more than doubled our client satisfaction. PHP has enabled us to provide database-driven dynamic solutions which perform at phenomenal speeds." PHP 3.0 is available for free download in source form and binaries for several platforms at http://www.php.net/. The PHP Development Team is an international group of programmers who lead the open development of PHP and related projects. For more information, the PHP Development Team can be contacted at core@php.net.
Nach der Veröffentlichung von PHP 3.0 ging es mit der Nutzung erst richtig los. Die Eingabeaufforderung für Version 4.0 kam von einer Reihe von Entwicklern, die einige grundlegende Änderungen an der Architektur von PHP vornehmen wollten. Zu diesen Änderungen gehörten die Abstrahierung der Schicht zwischen der Sprache und dem Webserver, das Hinzufügen eines Thread-Safety-Mechanismus und das Hinzufügen eines fortschrittlicheren, zweistufigen Parse/Execute-Tag-Parsing-Systems. Dieser neue Parser, der hauptsächlich von Zeev und Andi geschrieben wurde, erhielt den Namen Zend Engine. Nach einer Menge Arbeit von vielen Entwicklern wurde PHP 4.0 am 22. Mai 2000 veröffentlicht.
Zum Zeitpunkt der Drucklegung dieses Buches ist PHP Version 7.3 bereits seit einiger Zeit veröffentlicht. Es hat bereits einige kleinere "Dot"-Releases gegeben, und die Stabilität dieser aktuellen Version ist recht hoch. Wie du in diesem Buch sehen wirst, gab es in dieser Version von PHP einige große Fortschritte, vor allem bei der Codeverarbeitung auf der Serverseite. Außerdem wurden viele kleinere Änderungen, neue Funktionen und Erweiterungen eingebaut.
Der weit verbreitete Einsatz von PHP
Abbildung 1-1 zeigt die Nutzung von PHP, wie sie von W3Techs im März 2019 zusammengestellt wurde. Die interessanteste Information ist, dass 79 % aller untersuchten Websites PHP verwenden und dass die Version 5.0 immer noch die am weitesten verbreitete ist. Wenn du dir die Methodik der W3Techs-Umfragen ansiehst, wirst du feststellen, dass sie die 10 Millionen besten Websites (basierend auf dem Traffic; der Popularität der Website) der Welt auswählen. Es ist offensichtlich, dass PHP sehr weit verbreitet ist!
PHP installieren
Wie bereits erwähnt, ist PHP für viele Betriebssysteme und Plattformen verfügbar. Daher solltest du die PHP-Dokumentation konsultieren, um die Umgebung zu finden, die am ehesten zu derjenigen passt, die du verwenden wirst, und die entsprechenden Anweisungen zur Einrichtung befolgen.
Von Zeit zu Zeit möchtest du vielleicht auch die Art und Weise ändern, wie PHP konfiguriert ist. Dazu musst du die PHP-Konfigurationsdatei ändern und deinen Webserver (Apache) neu starten. Jedes Mal, wenn du eine Änderung an der PHP-Umgebung vornimmst, musst du den Webserver (Apache) neu starten, damit die Änderungen wirksam werden.
Die Konfigurationseinstellungen von PHP werden normalerweise in einer Datei namens php.ini ( ) gespeichert. Die Einstellungen in dieser Datei steuern das Verhalten von PHP-Funktionen, wie z. B. die Sitzungsbehandlung und die Formularverarbeitung. In späteren Kapiteln wird auf einige der php.ini-Optionen verwiesen, aber im Allgemeinen erfordert der Code in diesem Buch keine angepasste Konfiguration. In der PHP-Dokumentation findest du weitere Informationen zur Konfiguration der php.ini.
Ein Spaziergang durch PHP
PHP-Seiten sind in der Regel HTML-Seiten, in die PHP-Befehle eingebettet sind. Das steht im Gegensatz zu vielen anderen dynamischen Webseitenlösungen, die Skripte sind, die HTML erzeugen. Der Webserver verarbeitet die PHP-Befehle und sendet ihre Ausgabe (und eventuell HTML aus der Datei) an den Browser. Beispiel 1-1 zeigt eine vollständige PHP-Seite.
Beispiel 1-1. hello_world.php
<html>
<head>
<title>
Look Out World</title>
</head>
<body>
<?php
echo
"Hello, world!"
;
?>
</body>
</html>
Speichere den Inhalt von Beispiel 1-1 in einer Datei, hello_world.php, und rufe sie mit deinem Browser auf. Das Ergebnis siehst du in Abbildung 1-2.
Der PHP-Befehl echo
erzeugt eine Ausgabe (in diesem Fall die Zeichenfolge "Hello, world!"), die in die HTML-Datei eingefügt wird. In diesem Beispiel wird der PHP-Code zwischen den <?php
und ?>
Tags. Es gibt noch weitere Möglichkeiten, deinen PHP-Code mit Tags zu versehen - siehe Kapitel 2 für eine ausführliche Beschreibung.
Konfigurationsseite
Die PHP-Funktion phpinfo()
erstellt eine HTML-Seite voller Informationen darüber, wie PHP installiert wurde und aktuell konfiguriert ist. Damit kannst du sehen, ob du bestimmte Erweiterungen installiert hast oder ob die Datei php.ini angepasst wurde. Beispiel 1-2 ist eine vollständige Seite, die die phpinfo()
Seite anzeigt.
Beispiel 1-2. Verwendung von phpinfo()
<?php
phpinfo
();
?>
Abbildung 1-3 zeigt den ersten Teil der Ausgabe von Beispiel 1-2.
Formulare
Beispiel 1-3 erstellt und verarbeitet ein Formular. Wenn der Benutzer das Formular absendet, werden die in das Namensfeld eingegebenen Informationen über die Aktion $_SERVER['PHP_SELF']
form an diese Seite zurückgeschickt. Der PHP-Code prüft, ob ein Namensfeld vorhanden ist und zeigt eine Begrüßung an, wenn er eines findet.
Beispiel 1-3. Verarbeitung eines Formulars (form.php)
<html>
<head>
<title>
Personalized Greeting Form</title>
</head>
<body>
<?php
if
(
!
empty
(
$_POST
[
'name'
]))
{
echo
"Greetings,
{
$_POST
[
'name'
]
}
, and welcome."
;
}
?>
<form
action=
"
<?php
echo
$_SERVER
[
'PHP_SELF'
];
?>
"
method=
"post"
>
Enter your name:<input
type=
"text"
name=
"name"
/>
<input
type=
"submit"
/>
</form>
</body>
</html>
Das Formular und die Nachricht sind in Abbildung 1-4 dargestellt.
PHP-Programme greifen hauptsächlich über die Array-Variablen $_POST
und $_GET
auf Formularwerte zu. In Kapitel 8 werden Formulare und die Verarbeitung von Formularen ausführlicher behandelt.
Datenbanken
PHP unterstützt alle gängigen Datenbanksysteme, darunter MySQL, PostgreSQL, Oracle, Sybase, SQLite und ODBC-kompatible Datenbanken. Abbildung 1-5 zeigt einen Teil einer MySQL-Datenbankabfrage , die durch ein PHP-Skript ausgeführt wird und die Ergebnisse einer Buchsuche auf einer Buchbesprechungsseite anzeigt. Sie listet den Buchtitel, das Erscheinungsjahr und die ISBN des Buches auf.
Der Code in Beispiel 1-4 stellt eine Verbindung zur Datenbank her, führt eine Abfrage durch, um alle verfügbaren Bücher abzurufen (mit der WHERE
Klausel), und erzeugt eine Tabelle als Ausgabe für alle zurückgegebenen Ergebnisse durch eine while
Schleife.
Hinweis
Der SQL-Code für diese Beispieldatenbank befindet sich in der mitgelieferten Datei library.sql. Du kannst diesen Code in MySQL ablegen, nachdem du die Bibliotheksdatenbank erstellt hast. Dann steht dir die Beispieldatenbank zur Verfügung, um das folgende Codebeispiel und die zugehörigen Beispiele in Kapitel 9 zu testen.
Beispiel 1-4. Abfrage der Bücherdatenbank (booklist.php)
<?php
$db
=
new
mysqli
(
"localhost"
,
"petermac"
,
"password"
,
"library"
);
// make sure the above credentials are correct for your environment
if
(
$db
->
connect_error
)
{
die
(
"Connect Error (
{
$db
->
connect_errno
}
)
{
$db
->
connect_error
}
"
);
}
$sql
=
"SELECT * FROM books WHERE available = 1 ORDER BY title"
;
$result
=
$db
->
query
(
$sql
);
?>
<html>
<body>
<table
cellSpacing=
"2"
cellPadding=
"6"
align=
"center"
border=
"1"
>
<tr>
<td
colspan=
"4"
>
<h3
align=
"center"
>
These Books are currently available</h3>
</td>
</tr>
<tr>
<td
align=
"center"
>
Title</td>
<td
align=
"center"
>
Year Published</td>
<td
align=
"center"
>
ISBN</td>
</tr>
<?php
while
(
$row
=
$result
->
fetch_assoc
())
{
?>
<tr>
<td>
<?php
echo
stripslashes
(
$row
[
'title'
]);
?>
</td>
<td
align=
"center"
>
<?php
echo
$row
[
'pub_year'
];
?>
</td>
<td>
<?php
echo
$row
[
'ISBN'
];
?>
</td>
</tr>
<?php
}
?>
</table>
</body>
</html>
Dynamische Inhalte, die von Datenbanken bereitgestellt werden, sind die Grundlage für Nachrichten, Blogs und E-Commerce-Seiten, die das Herzstück des Internets bilden. Weitere Details zum Zugriff auf Datenbanken mit PHP findest du in Kapitel 9.
Grafiken
Mit PHP kannst du mithilfe der GD-Erweiterung ganz einfach Bilder erstellen und manipulieren. Beispiel 1-5 bietet ein Texteingabefeld, in dem der Benutzer den Text für eine Schaltfläche angeben kann. Es nimmt eine leere Button-Bilddatei und zentriert den Text, der als Parameter GET
'message'
übergeben wurde, darauf. Das Ergebnis wird dann als PNG-Bild an den Browser zurückgeschickt.
Das in Beispiel 1-5 erstellte Formular ist in Abbildung 1-6 dargestellt. Die erstellte Schaltfläche ist in Abbildung 1-7 zu sehen.
Mit GD kannst du die Größe von Bildern dynamisch ändern, Diagramme erstellen und vieles mehr. PHP verfügt auch über mehrere Erweiterungen, um Dokumente im beliebten PDF-Format von Adobe zu erzeugen. Kapitel 10 befasst sich ausführlich mit der dynamischen Bilderzeugung, während Kapitel 11 erklärt, wie du Adobe PDF-Dateien erstellen kannst.
Was kommt als Nächstes?
Nachdem du nun einen Vorgeschmack darauf bekommen hast, was mit PHP möglich ist, bist du bereit, das Programmieren in dieser Sprache zu lernen. Wir beginnen mit der grundlegenden Struktur der Sprache und legen dabei besonderes Augenmerk auf benutzerdefinierte Funktionen, Stringmanipulation und objektorientierte Programmierung. Dann gehen wir zu spezifischen Anwendungsbereichen über, wie z. B. Web, Datenbanken, Grafiken, XML und Sicherheit. Wir schließen mit Kurzreferenzen zu den eingebauten Funktionen und Erweiterungen ab. Wenn du diese Kapitel meisterst, wirst du PHP beherrschen!
Get PHP programmieren, 4. Auflage now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.