Titelillustration
 
Alle Support-Themen im Überblick
 
 

Einführung in die PHP Programmierung


    Einführung
 

 

PHP gehört zu den beliebtesten Programmiersprachen für Webprojekte. Die Sprache ist relativ einfach zu erlernen und führt schnell zu Erfolgserlebnissen. Mit PHP können Sie Suchfunktionen, Gestaltungsbausteine, Gästebücher, Foren oder ganze Contentmanagementsysteme programmieren.
Anhand dieses Tutorials können Sie die sfk-Schulung "Einführung in die PHP Programmierung" nachbereiten.

Wenn Sie mit den Grundlagen der Programmierung nicht vertraut sind und Ihnen Begriffe wie Variable oder Funktion nichts sagen, ist das Tutorial Programmierung für Mediengestalter eine gute Vorbereitung für diesen Kurs.


    Geschichte
 

 

Rasmus Lerdorf stellte die erste Version seiner Programmiersprache 1994 unter dem Namen Personal Home Page Tools (PHP Tools) vor. Die Software wurde als Open Source Projekt weiterentwickelt und kam im Mai 2000 in der Version 4.0 heraus. Im November 2001 überstieg die Zahl der PHP-nutzenden Domains die Millionengrenze.


    Was Sie brauchen, um PHP zu lernen
 

 

Um die folgenden Übungen nachzuvollziehen, benötigen Sie einen PHP-fähigen Webserver. Zum Beispiel den Apache-Webserver mit PHP-Modul. Die meisten Webhoster bieten in ihren Paketen PHP standardmäßig mit an, zum Teil sogar zusammen mit einer MySQL-Datenbank. Einige kostenlose PHP-fähige Webhostingangebote sind am Ende dieser Seite aufgeführt.

Wenn Sie sich einen PHP-fähigen Webserver lokal auf Ihrem Computer installieren wollen, ist die OpenSource Lösung XAMPP von apachefriends empfehlenswert. XAMPP steht unter Linux und Windows zur Verfügung, eine Variate für Solaris und Mac OS X ist zur Zeit (Juni 2005) in Planung. Es enthält den Webserver Apache, die Datenbank MySQL und Module für die Skriptsprachen Perl und PHP.


    Wie PHP-Skripte funktionieren
 

 

PHP ist eine Skriptsprache, die vom Webserver interpretiert wird. D.h. der Webbrowser schickt eine Anfrage an eine Webseite, die PHP-Code enthält. Der Webserver lässt den in der Datei enthaltenen PHP-Code durch das PHP-Modul interpretieren und schickt das Ergebnis an den Webbrowser zurück.


    PHP-Code schreiben
 

 

Alternativ können Sie auch die folgenden Tags benutzen, um PHP-Anweisungen zu kennzeichnen:
<? ... ?>
oder
<script language="php"> ...</script>

Der auszuführende PHP-Code kann direkt in den body-Bereich einer HTML-Seite eingefügt werden. Damit der Webserver den Code erkennen kann, werden die PHP Anweisungen mit dem Tag <?php ... ?> gekennzeichnet:

<?php
Hier stehen die PHP-Anweisungen ...
?>

In eine HTML-Seite eingebunden würde der Code z.B. wie folgt aussehen:

<head>
</head>
<body>
<?php
  print("Hallo Welt");
?>
</body>
</html>

Geben Sie das obenstehende Beispiel in einem Texteditor ein und speichern Sie die Datei unter dem Namen "test.php" auf Ihrem Webserver.
Mit welcher Endung Ihre Datei gespeichert werden sollte, hängt von der Konfiguration des Webservers ab. Manche Server sind so konfiguriert, dass der PHP-Code unabhängig von der Dateiendung immer verarbeitet wird. In diesem Fall würde der PHP-Code ausgeführt, auch wenn Ihre Datei die Endung .html oder .htm hat.
In Ihrem Webbrowser müsste jetzt die Ausgabe "Hallo Welt" zu sehen sein. Damit der Webserver die Datei korrekt verarbeitet, sollten Sie die Dateiendung .php und nicht etwa .html wählen.

Die Textausgabe lässt sich mit HTML-Tags bzw. CSS-Angaben auch formatieren:

<?php
print("<h1 style='color: #e1dbc4'>Hallo</h1>");
?>


    Die Syntax
 


Achten Sie auf die richtige Syntax, schon ein vergessenes Semikolon oder ein falsch gesetztes Anführungszeichen gibt eine Fehlermeldung.
Beachten Sie, dass die Farbdefinitionen im obenstehenden Beispiel in einfachen und nicht in doppelten Anführungszeichen stehen. Würde die Farbdefinition in doppelten Anführungszeichen stehen, würde das zu einem Syntaxfehler führen, da die print-Anweisung zu früh beendet würde.
Ein weiterer Unterschied bei einfachen bzw. doppelten Anführungszeichen besteht darin, dass Variablen, die sich in einer Zeichenfolge mit doppelten Anführungszeichen befinden, durch ihre jeweiligen Werte ersetzt werden. Bei der Verwendung einfacher Anführungszeichen wird die Zeichenfolge hingegen genauso interpretiert, wie sie dasteht, selbst dann, wenn sie Variablen enthält.
Eine Anweisung wird in PHP mit einem Semikolon beendet.
In PHP wird zwischen Groß- und Kleinschreibung unterschieden. $Summe ist also etwas anderes als $summe.

Kommentieren Sie Ihren Code entweder mit:

// um eine einzelne Zeile auszukommentieren

oder mit

/* um mehrere
Zeilen auszukommentieren */



    Einfache Skripte
 

 

Für die untenstehenden Übungen wie Formularauswertung und MySQL-Datenbankanbindung machen wir uns zunächst mit ein paar einfachen PHP-Skripten vertraut. Die Beispiele geben einen Eindruck davon, was mit dieser Skriptsprache möglich ist.

Mit der folgenden Anweisung gibt Ihnen der Server Informationen über die installierte PHP-Version aus. Neben der print-Anweisung gibt es auch die echo-Anweisung , um Inhalte im Browserfenster auszugeben. Die print-Anweisung liefert im Gegensatz zu echo allerdings die Rückgabewerte TRUE oder FALSE - je nach Erfolg.

<?php
print(phpinfo());
?>



Datumfunktionen

Geben Sie das aktuelle Datum im Browser aus.

<?php
print(date("d.m.Y"));
?>

In Ihrem Browser müsste jetzt eine Ausgabe wie beispielsweise "05.03.2005" erscheinen. Weitere Parameter von date() finden Sie im PHP-Handbuch unter http://www.php.net/manual/de/function.date.php


Eine der meistgenutzten PHP-Funktionen ist die include-Anweisung um PHP-Code aus externen Dateien einzubinden. Mit diesen Dateien können Sie HTML-Code für wiederkehrende Designelemente Ihrer Website oder häufig gebrauchte PHP-Funktionen einbinden. Neben der include()-Anweisung gibt es auch die Funktion require(). Während include() nur eine Warnmeldung liefert, falls ein Fehler auftritt (z.B. wenn die einzubindende Datei nicht gefunden wird), bricht require() das Skript im Fehlerfall ab.

include 'fusszeile.php';



Rechnen Sie mit Variablen

Variablen brauchen Sie, um Werte im Programmablauf zu speichern.
In diesem Beispiel wird zu einem Nettopreis die Mehrwertsteuer addiert. Weiter unten auf dieser Seite sehen Sie ein Skript, das Variablen aus einem Formular verarbeitet.
<?php
$netto = 25;
$mwst = 0.18;
$summe = $netto + $netto * $mwst;
print("Summe = ".$summe);
/* Bei einem Nettopreis von EUR 25,- und einer Mehrwertsteuer von 18% beträgt der Bruttopreis EUR 29,50. */
?>

Hinweis für Programmierer: PHP erfordert bei Variablen keine explizite Typ-Definition.

Nutzerdaten ermitteln

<?php
$remoteaddr= $_SERVER["REMOTE_ADDR"];
$remotehost= @gethostbyaddr( $_SERVER["REMOTE_ADDR"] );
$useragent= $_SERVER["HTTP_USER_AGENT"];
$referer= $_SERVER["HTTP_REFERER"];
$page= $_SERVER["REQUEST_URI"];
echo "Ihre IP-Adresse lautet: "."$remoteaddr"."<br />";
echo "Ihr Einwahlserver ist: "."$remotehost"."<br />";
echo "Ihr Webbrowser ist: "."$useragent"."<br />";
echo "Sie kamen von folgender Seite: "."$referer"."<br />";
echo "Diese Seite ist: "."$page"."<br />";
?>

Dieses Skript ermittelt Nutzdaten wie IP-Adresse oder Browserversion. Damit könnten Sie Besucher mit veraltetem Webbrowser automatisch auf eine andere Seite umlenken.

Bedingungen mit if else

Mit Bedingungen steuern Sie den Programmablauf. In dem weiter unten stehenden Skript zur Formularauswertung wird z.B. mit einer Bedingung geprüft, ob bestimmte Formularfelder ausgefüllt wurden. Wenn ein benötigtes Formularfeld nicht ausgefüllt wurde, erhält der Anwender eine entsprechende Fehlermeldung.

Um den Ablauf eines Programms zu steuern, setzen Sie Kontrollstrukturen wie if, for oder switch ein.

<?php
print(date("d.m.Y")."<br />");
if (date("d.m.Y")== "03.03.2005"){
  print("Heute ist der dritte M&auml;rz");
  }
?>


Um mehrere Bedingungen abzuprüfen ist eine switch-case Konstruktion übersichtlicher, als eine verschachtelte if-else Anweisung.

<?php
$summe = 12;
  switch($summe) {
    case "11";
    print("zu wenig");
    break;
    case "12";
    print("genau richtig");
    break;
    case "13";
    print("zu viel");
    break;
}
?>

Das break-Statement beendet die switch-case Anweisung, wenn eine Bedingung erfüllt ist. Fehlt break, würden auch die weiteren Anweisungen ausgeführt.

 

Aufgabe

Geben Sie auf einer Webseite abhängig von der Tageszeit die Sätze „Guten Morgen”, „Guten Tag” bzw. „Gute Nacht” aus. Verwenden Sie dazu die Date-Funktion.

 

    Weitere Beispiele für ausgewählte PHP-Funktionen
 

 

Ein Passwortschutz

Mit dem folgenden Skript bauen Sie sich einen simplen Passwortschutz für eine Webseite.
Zunächst brauchen Sie eine HTML-Seite mit einem Formular für die Passworteingabe:

<html>
<form action="geheimeSeite.php" method="post">
<input type="password" name="pwd">
<input type="submit" value="submit">
</form>
</html>

Dann brauchen Sie ein Skript, das die Benutzereingabe auswertet. Dieses Skript bekommt den Dateinamen "geheimeSeite.php". Es leitet den Besucher weiter auf eine Downloadseite.Es gibt allerdings sichere Methoden, um Bereiche einer Website zu schützen. Wenn Sie Zugriff auf die Serverkonfiguration oder die .htaccess-Datei eines Verzeichnisses haben, sollten Sie damit arbeiten.

<?php
if($HTTP_POST_VARS[pwd] == "aenigma") {
echo '<head> <meta http-equiv="refresh" content="2;URL=download.html"> </head>';
echo "<body>Das Passwort ist richtig, gleich geht's weiter.</body> ";
} else {
die("Das Passwort ist falsch!");
}
?>

 

String-funktionen

Zeichenketten werden mit dem Punkt ( ".") verbunden.

<?php
$netto = 25;
$mwst = 0,18;
$summe = $netto + $nett0 * $mwst;
print("Summe = ".$summe);
?>


substr schneidet einen Teil aus einem Text aus.

print(substr("20.03.2005 16:31",0,10));


htmlentities wandelt Sonderzeichen in HTML-Code um.

print(htmlentities("Vergrößerung"));


strlen ermittelt die Länge einer Zeichenkette.

print(strlen("hallo!"));


Einfache und doppelte Anführungszeichen

Abhängig davon, ob sich eine Variable innerhalb einer Zeichenfolge in einfachen oder doppelten Anführungszeichen befindet, wird entweder der Variableninhalt oder der Variablenname ausgegeben. So führt der untenstehende Code zur Ausgabe:
$Farbe ist die Farbe der Liebe
rot ist die Farbe der Liebe

<?php
$Farbe = "rot";
$Aussage1 = '$Farbe ist die Farbe der Liebe';
$Aussage2 = "$Farbe ist die Farbe der Liebe";
echo $Aussage1."<br>";
echo $Aussage2;
?>

Dateisystemfunktionen

Mit der Funktion fopen() bereiten Sie eine Datei zum Lesen bzw. Schreiben vor.

Mithilfe von PHP können Sie Dateien schreiben oder lesen. Sie können Ihren Besuchern so z.B. die Möglichkeit geben, eine Webseite zu kommentieren und zu editieren.

Die Variable $Datei aus dem untenstehenden Beispiel enthält nicht den Inhalt der Datei sfk-seminare.txt, sondern ist lediglich ein Zeiger auf eben diese Datei. Die Funktion fwrite() schreibt dann den gewünschten Inhalt in die Datei. Zum Schluss wird mit fclose() der Zugriff auf die Datei beendet.
Hier der Code für die sfk-Seminarauswertungsseite.

<?php
echo "Vielen Dank fuer Ihre Anregungen.<br><a href = 'http://www.sfk-online.com/support/uebersicht.php'> Zur&uuml;ck zum sfk-support Server</a>";

// Auswertung in Datei schreiben
$jetzt = (date("d m Y H:i"));
$datei = fopen("./auswertungen/sfk-seminare.txt","a");
fwrite($datei," <html> Es gab folgende Beurteilung von Teilnehmer: $Teilnehmer, am $jetzt zum Seminar: $Seminartitel<br>
Praxisbezug: $Praxisbezug, Stofff&uuml;lle: $Stofffuelle, Schwierigkeitsgrad: $Schwierigkeitsgrad.<br>Arbeitsunterlagen: $Arbeitsunterlagen, Theorie: $Theorie, Uebungen: $Uebungen, Probleme und Fragen: $Fragen, Vortragsweise: $Vortragsweise, Tempo: $Tempo, Zeitplan: $Zeitplan. <br>Raum: $Raum, Technik: $Technik, Erwartung vor der Veranstalltung: $Erwartung, Durch die Veranstaltung erfuellt: $Erfuellt.<br>
Wertvoll war: $Wertvoll, Verbesserungsvorschlaege: $Verbesserungsvorschlaege, Beurteilung insgesamt: $Beurteilung.<br>
<br> </html>");

fclose($datei);
?>

Falls diese Übung bei Ihnen lediglich die Fehlermeldung "permission denied" im Browser hervorruft, sollten Sie die Schreib- und Leserechte der txt-Datei überprüfen. Unter Unix ändern Sie die Zugriffsrechte auf der Kommandozeile mit chmod 777 seminare.txt. Wenn Sie keinen lokalen oder ssh-Zugriff auf Ihren Webserver haben, können Sie evtl. auch Ihr FTP-Programm zum Ändern der Rechte nehmen. Zahlreiche FTP-Clients ermöglichen das Setzen von Dateirechten. Eine dritte Möglichkeit ist das Ändern von Dateirechten mit der PHP Funktion chmod().


Weitere ausgewählte Dateisystemfunktionen
file_exists() prüft, ob eine Datei existiert. filesize() ermittelt die Dateigröße in Byte. fileatime() gibt das Änderungsdatum einer Datei aus. unlink() löscht eine Datei.

Weitere Übungen zu Dateisystemfunktionen:
Verzeichnisse/Dateien zählen: http://www.selfphp.info/tipps_tricks/verzeichnisse/count_file.php


   

    Formularauswertung mit PHP
 

 

Um die Benutzereingaben aus unserer Formularübung auszuwerten und in einer eMail zu senden, werden diese Variablenwerte an die Datei FormularFolge.php gesendet. Hier folgt der Code dieser PHP-Datei.

<?php
$Jetzt = date("l dS of F Y h:i:s A");
$FormularInhalt="Anrede = $Anrede\n";
$FormularInhalt.="Name = $Name\n";
$FormularInhalt.="Vorname = $Vorname\n";
$FormularInhalt.="Strasse = $Strasse\n";
$FormularInhalt.="Ort = $Ort\n";
$FormularInhalt.="Telefon = $Telefon\n";
$FormularInhalt.="eMail = $eMail\n";
$FormularInhalt.="Medikament = $Medikament\n";
$FormularInhalt.="Bestelldatum = $Jetzt\n";
if ( mail("irgendwer@example.com", "Bestellung", $FormularInhalt) ) {
   $ausgabe="Ihre Bestellung wurde erfolgreich versendet.";
} else {
   $ausgabe="Fehler beim Versenden der Bestellung. Bitte probieren Sie es zu einem    sp&auml;teren Zeitpunkt noch einmal. ";
}
print($ausgabe);
?>

 

Ob der Anwender ein Formularfeld ausgefüllt hat, können Sie mit folgendem Code prüfen:

if ($Name=="") {
   print("das Feld Name muss ausgef&uuml;llt werden.");
   exit();
}

Ist in der Datei php.ini der Wert register_globals aus Sicherheitsgründen ausgeschaltet, müssen die einzelnen Variablenwerte aus dem Formular beispielsweise mit $Telefon=$HTTP_GET_VARS['$Telefon']; übergeben werden.
   

Weitere Links und Übungen zur Formularauswertung:
Checkboxenwerte in Datenbank speichern
Vorlage für automatisierte Formularauswertung
Die Funktion mail() im Detail: http://www.php.net/manual/de/function.mail.php


    PHP und MySQL
 

 

In der folgenden Übung bauen wir Schritt für Schritt ein kleines Gästebuch mithilfe einer MySQL-Datenbankanbindung. Die MySQL-Datenbank ist bereits auf dem sfk-Schulungsserver eingerichtet.

Datenbanken werden im Web unter anderem dazu genutzt, sogenannte Content Management Systeme (Redaktionssysteme) zu betreiben.
Auch bei Foren und Gästebüchern werden die Inhalte oft in einer Datenbank gespeichert.

Schritt 1: Als erstes versuchen wir eine Verbindung zum MySQL Server aufzubauen.

<?php
/* Einfache Verbindung zum MySQL-Server aufbauen
mysql_connect("localhost", "root", "user");
Der Benutzer root wird standardmäßig bei der MySQL-Installation eingerichtet
und hat zunächst kein Passwort.
In der MySQL-Datenbank auf dem sfk-Server hat er allerdings das Passwort "user".
Zeige Bestätigung, bei Verbindung (Benutzer "ruth" gibts allerdings nicht).
*/
if (mysql_connect("localhost", "ruth", "user")){
print("Verbindung zum Server aufgebaut.");
}
else {
print("Konnte leider keine Verbindung zum Server herstellen.");
}
?>

Wenn Sie im obenstehenden Skript den user "ruth" gegen "root" austauschen, klappt auch die Verbindung.

Eine Alternative zu der if else Konstruktion um eine Fehlermeldung auszugeben wäre die Funktion die().

<?php
$link = mysql_connect("localhost", "root", "");
if (!$link) {
die("Konnte leider keine Verbindung zum Server herstellen");
}
print ("Verbindung erfolgreich");
mysql_close($link);
?>

Die folgenden Schritte (Datenbank erstellen, sowie Tabellen anlegen und löschen) lassen sich auch mit anderen Tools wie phpMyAdmin komfortabel erledigen. Sie sind aber eine gute Übung für das Verständnis des Zusammenspiels von PHP und MySQL.

Schritt 2: neue Datenbank erstellen.

<?php
// Verbindung zum MySQL-Server aufbauen
mysql_connect("localhost", "root", "");
// Erstelle neue Datenbank
mysql_query("CREATE DATABASE Neue_DB_1");
//Verbindung zu MySQL schließen
mysql_close();
?>

Natürlich gibt es noch ganz andere Möglichkeiten, eine neue Datenbank auf dem MySQL-Server zu installieren, z.B. mit phpMyAdmin. Aber es geht auch mit PHP.

Schritt 3: Tabellen anlegen bzw. löschen.

<?php
// Verbindung zum MySQL-Server aufbauen
if (mysql_connect("localhost", "root", "user")){
print("Verbindung zum Server aufgebaut.");
}
else {
print("Konnte leider keine Verbindung zum Server herstellen.");
}
//Datenbank auswählen
mysql_select_db("Neue_DB_1");
// Erstelle neue Tabelle
mysql_query("CREATE TABLE Neue_Tabelle_1 (Name VARCHAR(20),Text VARCHAR(50))");
//Verbindung zu MySQL schließen
mysql_close();
?>

Die neue Tabelle besteht zunächst nur aus zwei Spalten für den Namen und den Text des Gästebuchbenutzers. Auch das Anlegen einer neuen Tabelle lässt sich mit phpMyAdmin und anderen Tools komfortabel erledigen.
Das Löschen einer Tabelle würden Sie mit dem folgenden Code erreichen:

//Datenbank auswählen
mysql_select_db("Neue_DB_1");
// Lösche Tabelle
mysql_query("DROP TABLE Neue_Tabelle_1");

Schritt 4: Daten eintragen

<?php
// Verbindung zum MySQL-Server aufbauen
if (mysql_connect("localhost", "root", "user")){
print("Verbindung zum Server aufgebaut.");
}
else {
print("Konnte leider keine Verbindung zum Server herstellen.");
}
//Datenbank auswählen
mysql_select_db("Neue_DB_1");
// Werte eintragen. Schreiben Sie hier exakt so viele Werte, wie Spalten in der Tabelle vorhanden sind.
if (mysql_query("INSERT INTO Neue_Tabelle_1 VALUES ('$Name', '$Text')")){
print("<br>Hallo ".$Name.", vielen Dank für den Eintrag.");
}
//Verbindung zu MySQL schließen
mysql_close();
?>

Wie Sie Daten über ein Formular in die Datenbank einlesen, sehen Sie in der Übungsdatei 7.MiniForum.php auf Ihrer Schulungs-CD.

Schritt 5: Daten auslesen

<?php
// Verbindung zum MySQL-Server aufbauen
if (mysql_connect("localhost", "root", "user")){
print("Verbindung zum Server aufgebaut.");
}
else {
print("Konnte leider keine Verbindung zum Server herstellen.");
}
//Datenbank auswählen
mysql_select_db("Neue_DB_1");
// Wähle die komplette Tabelle aus.
// Die Variable $Zeiger ist hier nur ein Zeiger und nicht die konkrete Anzahl der Datensätze.
$Zeiger = mysql_query("SELECT * FROM Neue_Tabelle_1");
// mysql_num_rows gibt die Anzahl der Zeilen (Datensätze) aus.
$Anzahl_Datensaetze = mysql_num_rows($Zeiger);
print("<br>In der Tabelle sind jetzt ".$Anzahl_Datensaetze." Datens&auml;tze vorhanden.<br>");
// wiederholtes Aufrufen von mysql_fetch_row holt neue Datensätze.
for($i=0;$i<$Anzahl_Datensaetze;$i++) {
$Inhalt = mysql_fetch_row($Zeiger);
print("<br>Datensatz ".$i.": ".$Inhalt[0]." ");
print($Inhalt[1]);
}
//Verbindung zu MySQL schließen
mysql_close();
?>

 

Weitere Übungen:

Größe einer Tabelle ermitteln: http://www.selfphp.info/tipps_tricks/mysql/mysql_db_tbl_size.php


    Grafik
 

 

Wenn auf Ihrem Webserver die GD-Grafikbibliothek installiert ist, können Sie Gif, Jpeg und PNG-Dateien über PHP erzeugen. Das folgende Beispiel erzeugt ein farbiges Rechteck mit Schrift.

<?php
header ("Content-type: image/jpeg");
$mein_bild = ImageCreate (300, 150);
$blau = ImageColorAllocate ($mein_bild, 21, 0, 177);
$Textfarbe= ImageColorAllocate ($mein_bild, 150,210,200);
imageFilledRectangle($mein_bild,20,20,280,130,$blau);
ImageString ($mein_bild, 10, 22, 5, "Ein einfaches Bild", $Textfarbe);
ImageJPEG ($mein_bild)
?>


    Sicherheit
 

 

Um sicherheitskritische Websites vor dem Zugriff von Hackern zu schützen, folgen hier einige Sicherheitshinweise.

Isolieren Sie die internen Variablen von den durch Benutzer übergebenen Variablen aus Formulardaten und stellen Sie sicher, dass Variablen keine „unsicheren Werte“ enthalten.
Initialisieren Sie Ihre Variablen mit $MeineVariable = EinWert;. Wenn eine Variable als Zahl importiert werden soll, nutzen Sie intval().
Entfernen Sie PHP-Anweisungen oder HTML-Tags aus Formularvariablen mit fgetss() , htmlspecialchars_decode() oder strip_tags.
Deaktivieren Sie ggf. die Option register_globals in der php-ini. Dann aber funktionieren Skripte nicht mehr, die Formularwerte direkt über globale Variablen erwarten. Kopieren Sie die Formularwerte dazu in globale Variablen wie im folgenden Beispiel:

$sorte = $_REQUEST['sorte'];

Die Funktionen realpath() und pathname() verhindern, dass Anwender schadhaften Code durch die Angabe eines absoluten Pfades ausführen können. realpath() entfernt spezielle Marker wie "..", basename() gibt nur den Teil einer Pfadangabe zurück, der den Dateinamen selbst enthält.

Mit der Option open_basedir in der php.ini-Datei beschränken Sie Dateisystem-Zugriffe auf ein bestimmtes Verzeichnis.

Setzen Sie die Option post_max_size in der php.ini auf einen sinvollen Wert wie 1 MB, um ein Überlauf des Dateisystems zu verhindern.

Schalten Sie unnötige Zugriffsrechte auf eine Datei rechtzeitig aus wie im folgenden Beispiel:

umask(077);
$fp = fopen("tmp/myfile", "w");

Teilen Sie sich mit anderen Benutzern einen virtuellen Webserver, haben diese unter Umständen Zugriff auf Session-Variablen, da diese standardmäßig im /tmp-Verzeichnis landen. Speichern Sie Sessiondateien besser in einem eigenen Verzeichnis. Legen Sie dazu im Virtual Host Block Ihrer httpd.conf-Datei die Richtline php_value session.save_path / eigenesVerzeichnis an. Alternativ können Sie Session-Variablen auch in einer Datenbank abspeichern.

Schalten Sie den safe_mode in der php.ini-Datei ein, wenn Sie den Webserver mit anderen Nutzern teilen.

Legen Sie wenn möglich Ihre Bibliotheken und include-Datei ausserhalb des Dokumentenverzeichnisses des Webservers ab.

Deaktivieren Sie unsichere PHP-Funktionen wie z.B. eval(), exec() oder system() über die Konfigurationsoption disable_functions().

Deaktivieren Sie Fehlermeldungen, die Aufschluss über Angriffsmöglichkeiten Ihres Systems geben könnten durch die Konfiguration display_errors = off.

Installieren Sie Suhosin , eine Software, die Verschlüsselungsfunktionen bietet, gegen Pufferüberläufe und unterschiedliche Atacken schützt.

Läuft PHP als cgi, hat der Websitebetreiber durch eine php.ini-Datei im gleichen Verzeichnis wie das auszuführende Skript nahezu unbegrenzten Einfluss auf die PHP-Optionen. Läuft PHP hingegen als mod_php, hat man wesentlch weniger Konfigurationsmöglichkeiten, nämlich nur durch Anweisungen in .htaccess-Dateien. Wie PHP in Ihrem Webserver eingebunden ist, erfahren Sie in der Ausgabe von <?php phpinfo(); ?> Steht im Feld Server API der Wert "Apache Handler", läuft mod_php andernfalls steht dort "cgi".

Links

MySQL-Injection: http://de3.php.net/manual/de/security.database.sql-injection.php
PHP-Manual: http://www.php.net/manual/de/security.php


    Performanceoptimierung
 


Die folgenden Hinweise sind in erster Linie für häufig besuchte Websites mit dynamisch generierten Seiten interessant. Bei einem Webserver, der nur wenige Anfragen pro Stunde erhält, müssen Sie sich über Performanceoptimierung keine Gedanken machen.

Wenn ein Webserver, der statische Seiten ausliefert, zu langsam erscheint, sollte sich der Hoster eine schnellere Anbindung in's Internet leisten, weniger Domains auf einem Server gleichzeitig hosten oder leistungsfähigere Hardware anschaffen.
  • Verwenden Sie include_once() bzw. require_once() statt include() oder require().
  • Arbeiten Sie mit persistenten Datenbankverbindungen.
  • Legen Sie dynamische Seiten in einem Proxycache wie Squid ab.
  • Generieren Sie nach Möglichkeit statische Seiten, anstatt den Webserver und das Content Management System immer wieder identische dynamische Seiten erstellen zu lassen.
  • Verteilen Sie die Last auf mehrere Server mit Loadbalancing und Redirection.
  • Replizieren Sie die SQL Datenbank auf mehrere Server.


    Literaturhinweise und Links
 

 

PHP Handbuch auf http://www.php.net/manual/de/
Kostenloses Webhosting mit PHP und MySQL auf http://www.spaceall.de/
Kostenloses Webhosting mit PHP und MySQL auf http://www.funpic.de/
XAMPP: http://www.apachefriends.org/de/
PHP in Dreamweaver: MySQL-Anbindung mit PHP in Dreamweaver
Skriptarchiv: http://www.dynamicwebpages.de/03.skript-archiv.php
ssh Client für Windows (für die Serverkonfiguration): Putty
Sicherheit: http://de3.php.net/features.safe-mode

PHP Michael Seeboerger-Weichselbaum, rororo, ISBN: 3499 61233
Programmieren mit PHP Lerdorf/Tatroe, O'Reilley, ISBN: 3-89721-177-7


   
 
[nach oben]
 

Letzte Aktualisierung dieser Datei am: 15.11.2007
Autor: Stephan Franke · Impressum und Hinweise zu diesen Seiten · Suche
Diese Seiten wurden produziert von: sfk


Haben Sie Anregungen, Kritik oder Ideen zu dieser Seite? Sie können hier einen Kommentar schreiben.
Ihr Kommentar wird am Ende dieser Seite angefügt.

Stephan, (eMail: info(at)sfk-online(dot)com) schrieb am 21.07.2005, 18.04 Uhr:
Diese kleine Kommentarfunktion ist ein Beispiel, wie Sie mit den Besuchern Ihrer Website in Kontakt treten können. Es ist in PHP realisiert und läuft auch ohne MySQL-Datenbank.

Susanne, eMail: info@sevenpools.de schrieb am 21.07.2005, 19.15 Uhr:
Dann kommt hier doch gleich der erste offizielle Eintrag von mir. Prima PHP-Einführungsseite. Gute Idee auch, Marginalien zu platzieren. Grüße, Susanne

Stephan, eMail: info(at)sfk-online(dot)com schrieb am 21.07.2005, 19.24 Uhr:
Hallo Susanne, danke für deinen Kommentar. Dass die Kommentarfunktion jetzt ohne MySQL läuft ist überigens gar kein so großer Nachteil. Alle Kommentare werden jetzt in einem Verzeichnis gespeichert, so dass kein allzu großes Datenchaos entsteht.
Stephan

Stefan B., eMail: sb(at)bluetarget(dot)de, schrieb am 28.07.2005, 19.45 Uhr:
Schöne Seiten. Und ich hab wieder was dazu gelernt. Die Formularauswertung werde ich mal ausprobieren. Brauche allerdings noch einen Code, der die Syntax einer eingegebenen E-Mail-Adresse überprüft. Gibt\'s sowas?

Stephan, eMail: info(at)sfk-online(dot)com, schrieb am 29.07.2005, 10.42 Uhr:
Die eMail-Angaben kannst du mit regular expressions überprüfen. Siehe http://de.php.net/manual/de/function.ereg.php
Viel Erfolg.

s*css, eMail: scss@hamm-sued.biz, schrieb am 04.04.2006, 14.46 Uhr:

Danke für die Info\'s. Musste gerade einen externen Footer einbinden.

Jörg Burmeister, eMail: keine Angabe, schrieb am 15.05.2006, 20.58 Uhr:

Guten Tag, Herr Franke eine Frage bzgl. der Formular-Abfrage: Wo genau muss ich \'$Telefon=$HTTP_GET_VARS[\'$Telefon\'];\' eintragen? Vielen Dank im Voraus. Gruß, Jörg

Stephan Franke, eMail: franke (at) sfk-online.com, schrieb am 07.06.2006, 11.54 Uhr:

Hallo Jörg,
die Variablen sollten am Anfang des Skripts deklariert werden.