PHP Hypertext Preprocessor (PHP)

PHP-Logo PHP4-Logo

Einleitung

PHP Überblick

PHP Architektur

Hello World

Einbettung:

<html>
<head>
<title>Test</title>
</head><body>
Test auf PHP:
<?php echo "<p>Hallo von PHP</p>"; ?>
<?php echo "<p>$HTTP_USER_AGENT</p>"; ?>
<?php show_source("hallo.phtml"); ?>
</body>

Ausgabe:

Test auf PHP:
Hallo von PHP
Mozilla/4.5 [en] (X11; I; Linux 2.0.35 i586)
...

PHP Beispiele

PHP 4: höhere Performance durch Kompilation
HTTP Sessions eingebaut
bessere Portabilität, auch für MS


PHP Sprache

Die Syntax ist von C, Java und Perl abgeleitet.

Werte, Variablen, Typen

   $foo = "0";
   $foo++;
   $foo += 1;

   $bar = (string) $foo;
   $foo = (int) $bar;

   $a = "b";
   $$a = "c";
   echo $b;

Kontrollstrukturen

Funktionen.

function tuwas($a) {
  echo "Eingabe = ", $a;
}

tuwas("mit einem Text");
function tuwas($a) {
  return "Eingabe = " . $a;
}

echo tuwas(´mit einem Text´);

PHP Pakete

dbm Datenbank (PHP3)

Ursprünglich von Berkeley, db, gdbm.

Auf (fast) allen Unix Systemen ohne Installation verfügbar.

nur (Key, Value)-Paare

DBA (Database abstraction layer) (PHP4)

dbm-artige API für PHP4

unterstützt mehrere reale Implementierungen: dbm, ndbm, gdbm, db2, db3, cdb

Auf (fast) allen PHP Systemen existiert eine der DBs

wie dbm nur (Key, Value)-Paare

Beispiel: Zugriffszähler (PHP3)

Einbettung mittels auto_prepend, oder direkt in die Seite

Verwendung

<?php 
  /* $counter_start="9999"; */
  echo "<h3>" . counter(). " Zugriffe,";
  echo " " . modified("de") . "</h3>"; 
?>

Counter Funktion

$filename=$SCRIPT_FILENAME;
$counter_start="1";
function counter() {
        global $filename, $counter_start;
        $counter_dir="/tmp/";
        $counter_db=$counter_dir . "zaehler.dbm";
        if (file_exists("$counter_db")) {
           $db=dbmopen($counter_db,"w");
           if ( dbmexists($db,$filename) ) {
               $cnt=dbmfetch($db,$filename);
               if ($counter_start=="1") { $cnt++; } 
               else { $cnt=$counter_start; }
               dbmreplace($db,$filename,$cnt);
           }
           else {
               $cnt=$counter_start;
               dbminsert($db,$filename,$cnt);
           }
           dbmclose($db);
           return "$cnt";
        }
        else {
           echo "Attempt to create file: " . $counter_db;
           $cnt=$counter_start;
           $db=dbmopen($counter_db,"n");
           dbminsert($db,$filename,$cnt);
           dbmclose($db);
           return "$cnt";
        }
}

Modified Funktion

$filename=$SCRIPT_FILENAME;
function modified($lang) {
        global $filename;
        $lm=date("d M Y H:i:s",filectime($filename));
        if ($lang=="de") {
           return "Geändert am $lm";
        } else {
           return "Last modified: $lm";
        }
}

Beispiel: Zugriffszähler (PHP4)

Verwendung wie oben

Counter Funktion

$filename=$SCRIPT_FILENAME;
$counter_start="1";
function counter() {
        global $filename, $counter_start;
        $counter_dir="/tmp/";
        $counter_db=$counter_dir . "zaehler.dbm";
        if (file_exists("$counter_db")) {
           $db=dba_open($counter_db,"w","gdbm");
           if ( dba_exists($filename,$db) ) {
              $cnt = dba_fetch($filename,$db);
              if ($counter_start=="1") { $cnt++; }
              else { $cnt=$counter_start; }
              dba_replace($filename,$cnt,$db);
           }
           else {
               $cnt=$counter_start;
               dba_insert($filename,$cnt,$db);
           }
           dba_close($db);
           return "$cnt";
        }
        else {
           echo "Attempt to create file: " . $counter_db;
           $cnt=$counter_start;
           $db=dba_open($counter_db,"n","gdbm");
           dba_insert($filename,$cnt,$db);
           dba_close($db);
           return "$cnt";
        }
}

Modified Funktion wie oben

PHP Beispiele

Installation, Konfiguration

Auf jedem Web-Server as CGI Programm

zum Beispiel bei Apache:

AddType application/x-php3-script .phtml
Action  application/x-php3-script /cgi-bin/php/

bei Apache als ladbares Modul

Aktivierung einzelner Datenbanken und Pakete

Weitere Direktiven z.B. in php3.ini oder in Apache Konfigurationsfiles mit Prefix php3_ oder im Code

Beispiel: php3.ini, php4.ini

PHP 4 Apache Direktiven:

  php_value [PHP directive name] [value]
  php_flag [PHP directive name] [On|Off]
  php_admin_value [PHP directive name] [value]
  php_admin_flag [PHP directive name] [On|Off]

Sicherheitsprobleme

sollten mit neuen Versionen behoben sein


Ausblick


© Universität Mannheim, Rechenzentrum, 1998-2002.

Heinz Kredel
Last modified: Fri Nov 29 10:11:28 CET 2002