Willkommen beim
PHP Hypertext Preprocessor
Einsteigerabend der ELUG
in der Villa-Vogelsang
<?php echo date ("d-m-Y", time()); ?>
= 20-03-2001
Beipackzettel (c) Andre Gellert , fehlerhaft und ungetestet
PHP = PHP Hypertext Preprocessor
1994 von Rasmus Lerdorf erdacht,
1995 als Personal Home Page Tools released und noch
1995 als PHP/FI Version 2.0 erschienen
FI = Form Interpreter Addon Paket zu PHP Tools
1997 von Zeev Suraski und Andi Gutmans komplett recoded und als 3.0 erschienen
03.2000 Release Candidate 1 zu Version 4.0
BSD-Lizenz ( php3 noch dual-licensed BSD/GPL)
Nachtrag:
http://www.php.net/license
Q. Why is PHP 4 not dual-licensed under the GNU General Public License (GPL) like PHP 3 was?
A. GPL enforces many restrictions on what can and cannot be done with the licensed code. The PHP developers decided to release PHP under a much more loose license (BSD style), to help PHP become as popular as possible.
Entwicklungsstand:
Entwicklung immer noch parallel :
PHP Version 3 wird immer noch weiterbetrieben
PHP 4.0.5 RC1 freigegeben
aktuell sind : PHP 3.0.18 und Patch Level 1 von PHP 4.0.4
Gute Sprachen für das Web:
PHP
Python
Perl
JSP
Pascal
uvm.
Nicht Gute Sprachen für das Web:
ASP
Literatur:
<html>
<head>
<title>Willkommen
Test</title>
</head>
<body>
Ausgabe von aktueller
Uhrzeit und Datum: <?php echo date ("l m-d-Y H:i", time()); ?>
<br>
</body>
</html>
Ausgabe von aktueller Uhrzeit und Datum: Tuesday, 03-20-2001 20:12
PHP 3 vs. PHP 4
nahezu 100% code-kompatibel
PHP 4 :
bessere Garbage-Cleanup
Sessions werden nativ unterstützt (früher meistens über phplib)
COM/DCOM support unter Windows,
verbesserte Eingliederung in Nicht-Apache http Dämonen
+ viele besserungen , die unmerklich in
PHP hineinwandern: Flash , PDF, XML, Array Handling
...
Mit PHP4 kam auch Zend:
kommerzielle Code-Engine für optimierten sichereren Produktionsbetrieb von PHP
Cachen von Ergebnissen zur extremen Beschleunigung von Aufgaben
Zend IDE 1.1 in Arbeit,
Zend Optimizer zum freien Download
kommerzieller Support
http://zend.com/zend/technology.php
Unterstützte Datenbanken
Nachtrag:
Adabas D Ingres Oracle (OCI7 and OCI8) dBase InterBase Ovrimos Empress FrontBase PostgreSQL FilePro (read-only) mSQL Solid Hyperwave Direct MS-SQL Sybase IBM DB2 MySQL Velocis Informix ODBC Unix dbm
/* Kommentar
ueber mehrere
Zeilen */
// einzeiliger Kommentar
1. <?php echo "hallo"; ?>
2. <? echo "hallo"; ?>
3. <%
echo "hallo"; %>
4. <script language="php">
echo
"hallo";
</script>
Konstanten:
define ("KONSTANTE1","Hallo");
echo KONSTANTE;
undefine
("KONSTANTE");
__FILE__ Dateiname
des Skripts
__LINE__ aktuelle Zeile im Skript
Variablentypen und automatische Typenkonvertierung
integer
Operatoren: + - * / %
Kombinierte Operatoren: += -= *= /= %= .=
Verschachtelung:
$a=($b=4)+5;
Bitoperatoren: & | ~
$a = 255;
$b=$a & 128; // == 128
$b=$b | 1; // == 129
logische Operatoren:
AND OR XOR
! = nicht
&& sowohl als auch
|| entweder
oder
Vergleichende Operatoren:
== != < > <= >=
if (10>9 && 10<100)
{
echo "wird
angezeigt";
}
else echo "wird niemals
angezeigt";
$a=1;
$b=2;
Function Addition
()
{
$b=$a+$b;
}
Addition();
echo $b; // FALSCH
Function Addition ()
{
global
$a,$b;
$b=$a+$b;
}
Addition();
echo $b; // Ausgabe von 3
Alternativ:
$GLOBALS["b"]=GLOBALS["a"]+GLOBALS["b"];
phpinfo(); listet andere globale Variablen
double (ähnlich Real)
$a=1;
$a+=2.30;
echo
$a;
printf ("%2.2f",$a); // "03.30"
printf ("%2d",$a); // "03";
string 0-32768 Chars
array
Typenkonvertierung erzwingen:
$a=10;
$b=(double)$a;
$b=(string)$a;
settype($b,"double");
oder string,integer,array,object anstatt
double...
$a=2;
$type=gettype($a); // $type = = integer
gettype liefert "unknown type" für ungültige Typen
if (is_integer($a)) echo ("Ist ein Integer");
...ebenso is_double,
is_string, is_array, is_object
object
Initialisierung
$email[]="elug@elug.de"
$email[]="elug-announce@elug.de"
$email[0]="elug@elug.de"
$email[1]="elug-announce@elug.de"
$email=array("elug@elug.de","elug-announce@elug.de");
$email[email1]="elug@elug.de"
$email[email2]="elug-announce@elug.de"
$email=array("email1"=>"elug@elug.de","email1"=>"elug-announce@elug.de");
Mehrdimensional:
$a_2dimensional_array=array(
"typ1"=>array("a"="eins","b"="zwei","c"="drei"),
"typ2"=>array(1,2,3),
"typ3"=>array("auch_eins",5=>"pizza","vegetarisch")
);
Durchlaufen eines Arrays mit next(), prev() oder mit each() , Sortierfunktionen a la sort(), asort(), rsort()... 8 Funktionen zum Sortieren vorhanden
Datenbanken:
Sehr ähnliche Funktionen in den Datenbankschnittstellen
Einfache
Portierung von Quelltext
Sinn-Verwandte Datenbanken ähneln sich besonders
(MySQL,mSQL)
Beispiel select von MySQL
Connect zur Datenbank:
mysql_connect("databasenode.domain.com","username","passwordxy");
mysql_pconnect("databasenode.domain.com","username","passwordxy");
->
Persistent connect , Dauer einer Connection Alive Time über php.ini
konfigurierbar
mysql_select_db("elug-test-db");
$querystring='select *
from emails where
name="'.$name.'"';
$result=mysql_query($querystring);
echo
mysql_num_rows($result)." Zeilen gefunden.";
for
(i=0,i<mysql_num_rows($result),i++)
{
}
$querystring='select * from emails where
name="'.$name.'"';
$querystring='delete from emails where
id="'.$id.'"';
echo
$querystring.'<hr>';
$result=mysql_query($querystring);
$updatestring='update // works not if (mysql_affected_rows()<>1) { echo
"unable to delete ".$id;} else { echo "deleted member ".$id;}
Beispiel select von PostgreSql
Sessions
Klassen:
Beispiel aus dem PHP Manual
<?php
class Einkaufswagen {
var $produkte; // Produkte in Ihrem Einkaufswagen
// Füge dem Einkaufswagen $anzahl Artikel der Sorte $artnr zu
function fuege_hinzu ($artnr, $anzahl) {
$this->produkte[$artnr] += $anzahl;
}
// Nimm $anzahl von Artikel wieder aus dem Einkaufswagen
function nimm_heraus ($artnr, $anzahl) {
if ($this->produkte[$artnr] > $anzahl) {
$this->produkte[$artnr] -= $anzahl;
return true;
} else {
return false;
}
}
}
?>
In diesem Beispiel wird eine Klasse "Einkaufswagen"definiert. Sie besteht aus einem assoziativen Array von
Produkten im Einkaufswagen und zwei Funktionen zum Zufügen und Entfernen von Einkäufen.
Klassen sind Typen, dass heisst die Blaupausen für realle Variablen. Um sie zu nutzen, muß zunächst eine Variable mit
dem Operator
new angelegt werden.$einkaufswagen = new Einkaufswagen;
$einkaufswagen->fuege_hinzu("10", 1);
Hier wird das Objekt $einkaufswagen aus der Klasse Einkaufswagen geschaffen. Dann wird die enthaltene Funktion
fuege_hinzu() aufgerufen, um ein Produkt mit der Artikelnummer 10 in den Einkaufswagen zu tun.
Klassen können ebenfalls Erweiterungen von anderen Klassen sein. Die erweiterte, oder auch abgeleitete Klasse
enthält alle Funktionen der ursprünglichen Klasse, und dazu die eigenen Ergänzungen. Das geschieht mit dem
Schlüsselwort "extends". Mehrfachvererbung wird von PHP nicht unterstützt.
class Mein_Einkaufswagen extends Einkaufswagen {
var $besitzer;
function setze_besitzer ($name) {
$this->besitzer = $name;
}
}
In diesem Beispiel wird eine Klasse Mein_Einkaufswagen definiert. Sie enthält alle Funktionen der Klasse
Einkaufswagen, eine zusätzliche Variable $besitzer und die zusätzliche Funktion setze_besitzer(). Man kann den
Einkaufswagen auch weiterhin wie oben erzeugen, nur kann man jetzt auch den Besitzer setzen oder herausfinden. Die
alten Funktionen der Klasse Einkaufswagen können ebenfalls weiterverwendet werden.
$meinkaufswagen = new Mein_Einkaufswagen; // Kreiere einen Einkaufswagen
$meinkaufswagen->setze_besitzer ("kris"); // Name dieser Klasse
print $meinkaufswagen->besitzer; // schreibe den Namen des Besitzers
$meinkaufswagen->fuege_hinzu ("10", 1); // (Siehe oben, vererbt
// von Einkaufswagen)
Links
http://www.php.net , besonders www.php.net/manual
http://www.zend.com
http://www.php-center.de
http://rent-a-phpwizard.de
http://www.dynamic-webpages.de
http://www.koehntopp.de/php die beste FAQ
http://reeg.net Tutorial "Datenbank, mySQL und PHP"
Englische Seiten:
http://www.devshed.com/Server_Side/PHP Developer Shed
Tools:
http://www.phpwizard.net/projects/phpMyAdmin/index.html
http://www.greatbridge.org/project/phppgadmin
Interessante Projekte
http://www.phpnuke.org Communityplattform nach Stil von slashdot.org
http://www.midgard-project.org Content Management System
http://gtk.php.net GNU Toolkit Bibliotheken