PHP Fortgeschrittenen Kurs Sommercampus 2006

Ähnliche Dokumente
Separierung der Darstellung durch Templates

Web-Anwendungsentwicklung mit dem Delivery Server

Programmieren von Webinformationssystemen

Übung zur Vorlesung Multimedia im Netz

suhosin PHP-Patch und PHP-Security Extension Peter Prochaska -

Datenbanksysteme SS 2007

PEAR Praxis, Teil 1. Früher ins Wochenende

Internet-Technologien

Grundlagen Internet-Technologien INF3171

Zend Framework MVC Applikationen testen

php Hier soll ein Überblick über das Erstellen von php Programmen gegeben werden. Inhaltsverzeichnis 1.Überblick Parameterübergabe...

Kompendium der Web-Programmierung

Multimedia im Netz Wintersemester 2011/12

Besser PHP programmieren

bitflux CMS ein crossmedia-fähiges opensource System ein Vortrag von Marcel Linnenfelser

Smarty Templates. von Sebastian Hardt

Freie Markierung Die Templating-Engine FreeMarker im Einsatz

WEBAPPLIKATIONEN MIT PHP. Wo gibt es Hilfe? Wie fang ich an?

Dynamische Websites mit XML und PHP4

ZSDGMDZFGW... Zehn Sicherheitsprobleme, die gerne mit dem ZendFramework gebaut werden. Ben Fuhrmannek #phpug-köln

PDF. PDF-Generierung aktivieren. Methode zum Erzeugen der PDFs. PDF-Format. Seitengröße. Anzunehmende Browserbreite

Web-Techniken Einführung in JavaScript

AuD-Tafelübung T-B5b

Imperia Unicode- und Multi-Language-HOWTO

Aufgaben eines Codegenerators

PHP und MySQL. Formulare - Datenübertragung mit PHP. Zellescher Weg 12 Willers-Bau A109 Tel

Dynamische Webseiten mit PHP. Oder: LAMP - The open way

Multimedia im Netz Wintersemester 2012/13

Neue Features in UliCMS

PHP-Autoloading ohne Fehler-Kontroll-Operator

Typo 3 installieren. Schritt 1: Download von Typo3

Fussball.de JavaScript

Web-basierte Anwendungssysteme PHP-Einführung

PHP-Kurs 1: Einführung und PHP- Grundlagen

Programmieren in Java -Eingangstest-

EWA PHP Einführung, CMS Prinzipien

Sachwortverzeichnis

Kapitel 4: PHP-Grundlagen Kapitel 5: PHP-Bausteine für Programme

Eclipse Tutorial.doc

Ab sofort ist es möglich, mehrere Formulare gleichzeitig zu bearbeiten, um Änderungen oder neue Eingaben gleichzeitig vornehmen zu können.

Java Tools JDK. IDEs. Downloads. Eclipse. IntelliJ. NetBeans. Java SE 8 Java SE 8 Documentation

Software Engineering II

Unified-E Standard WebHttp Adapter

Hochschule Darmstadt Fachbereich Informatik

PHP de Luxe PHP 5 Edition

Composing Shops. Modulinstallation und andere coole Composer Features. (auch) für den OXID eshop... und ein bisschen Shopware ;)

Praktikum im Grundstudium

Web-Anwendungen Teil 2 PHP kl. Studienprojekt (Praktikum) Winter 2014/ Daniel Fett

Frank Morgner VuFind Session 2012, Leipzig

Programmieren mit Edipse 3

Willkommen. Projektidee. Informationsablage Docs Softwarelizenzen Meetingprotokolle

auxiliary - Objektorientiertes Framework für PHP 5 Frank Kleine auxiliary Objektorientiertes Framework für PHP5

Grundlagen der Web-Entwicklung INF3172

Reflection. Arthur Zaczek. Nov 2014

Programmieren von Webinformationssystemen

Ablauf. Wichtige Termine. Vertiefendes Übungsprojekt - SQL II

6. XML-Verarbeitung. Vorlesung und Übung Dr. Peter Pfahler Institut für Informatik Universität Paderborn. XML Design Goals

Bitte führen Sie die Installation in der hier beschriebene Reihenfolge aus!

prostoragesaver Benutzerhandbuch promx GmbH Nordring Nürnberg

Anleitung REST API Schneelast-Messsystem SMS

Enterprise PHP Tools


Erweiterte Interaktion mit Trees und Charts in APEX

DataTables LDAP Service usage Guide

Ablauf Unit2. Walkthrough

Programmieren mit Eclipse 3

Dynamische Datentypen. Destruktor, Copy-Konstruktor, Zuweisungsoperator, Dynamischer Datentyp, Vektoren

SCHNELLEINSTIEG ZUM TOOL NODEBUILDER

Objektserialisierung

Anleitung REST API Schneelast-Messsystem SMS

DAS EINSTEIGERSEMINAR PHP 5.3 LERNEN ÜBEN ANWENDEN. Oliver Leiss Jasmin Schmidt. 3. Auflage

Anleitung zur Integration der /data.mill API in SAP Java Applikationen

Web-basierte Anwendungssysteme PHP Teil 2

Semistrukturierte Daten

Verschlüsseln eines Bildes. Visuelle Kryptographie. Verschlüsseln eines Bildes. Verschlüsseln eines Bildes

Konzeptionelle Modellierung von XML-Dokumenttypen

Webanwendungen mit Java und JavaServerPages

PHP und MySQL. Sicherheit und Session-Handling mit PHP. Zellescher Weg 12 Willers-Bau A109 Tel

PHP-Security. Aleksander Paravac. Aleksander Paravac (GNU/Linux User Group Bamberg/Forchheim) 1 / 27

Ein Array ist eine Liste mit Einträgen, fast wie eine Einkaufsliste. Man kann darin also mehr als einen Eintrag in eine einzige Variable speichern.

Neue Features in UliCMS 9.8.4

FensterHai. - Integration von eigenen Modulen -

Bitte führen Sie die Installation in der hier beschriebene Reihenfolge aus!

Websockets. Verbindungskanal zwischen Client-Anwendung (JavaScript in Browser) und Server.

Extending tl_member. Andreas Fieger

Rafał Wesołowski CLEAN CODE

Erstellen von PDF-Dokumenten für Business-Anwendungen mit XSL-FO

Einbindung in JIMDO-Shopsystem

2. Interaktive Web Seiten. action in Formularen. Formular. Superglobale Variablen $ POST, $ GET und $ REQUEST. GET und POST

Installationsanleitung: Firefox Stand:

Modell/Metamodell. Generated Source Code. Generator. Model. Fakultät für Informatik und Wirtschaftsinformatik MDSD - SS 2014

Jonas Hellwig/Christian Gatzen. Word Press^Themes. Design und I lüir Word Press. 3. Mit 409 Abbildungen

SharePoint Online Connector

XML. XML: Extensible Markup Language. Vorlesung und Übung Universität Paderborn Wintersemester 2016/2017 Dr. Peter Pfahler

In diesem Abschnitt wollen wir uns mit dem Thema XML Datenbank beschäftigen. Das Ziel ist, herauszufinden, was XML Datenbank überhaupt sind und was

Nutzung von REST Clients für Allyouneed Marktplatz

Team Developer 6.3.NET

Microsoft.NET XML-Webdienste Schritt für Schritt

<body> <h1>testseite für HTML-Parameter-Übergabe<br>50 Parameter werden übergeben</h1>

Transkript:

Dominik Benz, Albert-Ludwigs-Universität Freiburg PHP-Kurs des Sommercampus 2006, http://sommercampus2006.informatik.uni-freiburg.de/phpkurs PHP Fortgeschrittenen Kurs Sommercampus 2006 09.08.2006 Christoph Hermann, Dominik Benz {hermann,dbenz}@informatik.uni-freiburg.de

. Pear Quickform I Einfache Formulargenerierung I Vorbelegung der Felder möglich I Validierung der Formularfelder (Server- und Clientseitig) I Komplexe Regelerstellung möglich I Hierarchical Selects möglich Christoph Hermann, Dominik Benz, Albert-Ludwigs-Universität Freiburg 2/27

Pear Quickform Beispiel <?php require_once "HTML/QuickForm.php"; $user = array("lastname"=>"mouse","sal_id"=>4,"user_id"=>7); $salutations = array("0"=>"mr", "1"=>"Miss",..., "4"=>"Sir"); $form = new HTML_QuickForm( frmtest, get ); $form ->addelement( header, MyHeader, EditÃusername ); $form ->addelement( hidden, user_id ); $form ->addelement( select, sal_id, AddressÃmeÃas:, $salutations); $form ->addelement( text, lastname, LastÃname: ); $form ->addrule( lastname, YourÃlastnameÃisÃrequired, required ); $form ->addelement( reset, btnclear, Clear ); $form ->addelement( submit, btnsubmit, Submit ); if ($form ->validate()) { // Formular ist validiert, daten verarbeiten $form ->freeze(); $form ->process( process_data, false); } $form ->setdefaults($user); $form ->display();?> Christoph Hermann, Dominik Benz, Albert-Ludwigs-Universität Freiburg 3/27

. Pear Quickform - Datenauswertung <?php function process_data ($values) { echo "<pre>"; foreach ($values as $key=>$value) { echo $key."=".$value."<br>"; } echo "</pre>"; }?> Christoph Hermann, Dominik Benz, Albert-Ludwigs-Universität Freiburg 4/27

. Smarty I Smarty ist eine Template-Engine für PHP. I Erlaubt es die einfache Trennung von Applikations-Logik und Design/Ausgabe. I Sehr schnell im Gegensatz zu anderen Template-Engines I Unbegrenzte Verschachtelung von 'section', 'if' und anderen Blöcken. I Konfigurierbare Syntax für Template-Tags: {}, {{}}, < >,!... Christoph Hermann, Dominik Benz, Albert-Ludwigs-Universität Freiburg 5/27

. Einfaches Smarty Beispiel {* Smarty *} <table > <tr> <td class="text"> {section name=count loop=$news} {if $smarty.section.count.index % 5 == 0} </td><td class="text"> {/if} <a href="news.php?id={$news[count].id}"> <b>{$news[count].thema}</b> </a><br /> {/section} </td> </tr> </table > Christoph Hermann, Dominik Benz, Albert-Ludwigs-Universität Freiburg 6/27

I Eingebauter Caching-Support! Smarty Beispiel <?php require( Smarty.class.php ); $smarty = new Smarty(); $smarty ->caching = true; if(!$smarty ->is_cached( index.tpl )) { // kein Cache gefunden, also Variablen zuweisen $contents = get_database_contents(); $smarty ->assign($contents); } $smarty ->display( index.tpl );?> I Per-User Caching z.b. durch cacheids möglich: <?php require( Smarty.class.php ); $smarty = new Smarty(); $smarty ->caching = true; //... cacheid erzeugen $smarty ->display( index.tpl,$cacheid);?> Christoph Hermann, Dominik Benz, Albert-Ludwigs-Universität Freiburg 7/27

. Pear Quickform Controller (Multipage Forms) I Vorteile von Quickform I Mehrseitige Formulare I Vor- / Zurückblättern I Integration mit Smarty auch möglich: smarty-dynamic.tpl Siehe QuickForm docs: docs/renderers/templates I Code rel. komplex (lang), daher hier kein Beispiel Christoph Hermann, Dominik Benz, Albert-Ludwigs-Universität Freiburg 8/27

PHPKurs / Einführung / PHP / Basics phpdocumentor I phpdoc(umentor) ist ein Dokumentationsstandard der JavaDoc sehr ähnelt. I Installation 1/2 Download&unzip: http://pear.php.net/package/phpdocumentor/download PHP konfigurieren: $ setup lang/php5 $ which php /usr/local/lang/php/5.1.4/bin/php Christoph Hermann, Dominik Benz, Albert-Ludwigs-Universität Freiburg 9/27

. I Installation 2/2 phpdocumentor I Eclipse konfigurieren: $ setup devel/eclipse I Integration in (PHP)Eclipse: Eclipse Run External Tools External Tools Program New Name: PHPDocumentor Location: /usr/local/lang/php/5.1.4/bin/php Arguments: path/to/phpdocumentor/phpdoc.inc -t ${project_loc}/doc -o HTML:Smarty:PHP -d ${project_loc} -s on Tab Refresh: [x] Refresh resources upon completion (x) The Project containing the selected resource [x] Recursively include subfolders Christoph Hermann, Dominik Benz, Albert-Ludwigs-Universität Freiburg 10/27

PHPUnit PHPUnit installieren I Download: http://pear.php.net/package/phpunit2/download I phpunit Skript vorbereiten: pear-phpunit Skript in phpunit umbenennen Den String @php_bin@ durch den Pfad zu PHP ersetzen phpunit skript ausführbar machen I @package_version@ in PHPUnit2/Runner/Version.php durch die Versionsnummer der PHPUnit2 Version ersetzen die heruntergeladen wurde I phpunit UnitTest UnitTest.php Führt die Tests der Testfall-Klasse UnitTest aus. Christoph Hermann, Dominik Benz, Albert-Ludwigs-Universität Freiburg 11/27

PHPUnit Beispiel <?php require_once PHPUnit2/Framework/TestCase.php ; class ArrayTest extends PHPUnit2_Framework_TestCase { protected $arr; protected function setup() { $this ->arr = Array(); }?> } public function testnewarrayisempty() { // Der erwartete Wert von sizeof($this->arr) ist 0. $this ->assertequals(0, sizeof($this ->arr)); } public function testarraycontainsanelement() { // Ein Element dem Array hinzufügen. $this ->arr[] = Element ; } // Der erwartete Wert von sizeof($this ->arr) ist 1. $this ->assertequals(1, sizeof($this ->arr)); Christoph Hermann, Dominik Benz, Albert-Ludwigs-Universität Freiburg 12/27

Konfigurations-Datei für PHP: php.ini php.ini I befindet sich oft in /etc/php5/apache2/php.ini; Pfad wird auch in phpinfo() angezeigt I Einstellungen können in dieser Datei vorgenommen werden oder dynamisch zur Laufzeit per Funktion!ini_set! (nicht alle, siehe http://www.php.net/manual/en/ini.phpini.list I Veränderungen an php.ini werden erst nach Neustart des Webservers wirksam register_globals <boolean> schaltet an / aus, ob per POST/GET übergebene Variablen automatisch global verfügbar sind. Sollte ausgeschaltet sein! post_max_size <integer>definiert die maximale Datenmenge in Bytes, die per POST hochgeladen werden kann (auch Dateien). Muss für grosse Dateien grösser sein als upload_max_filesize <integer> Christoph Hermann, Dominik Benz, Albert-Ludwigs-Universität Freiburg 13/27

php.ini - 2 register_globals <boolean> schaltet an / aus, ob per POST/GET übergebene Variablen automatisch global verfügbar sind. Sollte ausgeschaltet sein! memory_limit <integer>legt den maximalen Speicherverbrauch eines Skripts fest. Der Standard von 8 MB muss für einige Anwendungen, besonders CMS, hochgesetzt werden include_path <string>gibt eine Liste von Pfaden an, in denen nach einzubindenen Dateien gesucht wird. Praktisch für Libraries wie PEAR file_uploads <boolean> erlaubt / verbietet das Hochladen von Dateien upload_tmp_dir <string> gibt den Pfad an, in dem hochgeladene Dateien zwischengespeichert werden Christoph Hermann, Dominik Benz, Albert-Ludwigs-Universität Freiburg 14/27

php.ini - 3 session.save_path <string> legt den Pfad fest, in dem Session-Daten gespeichert werden session.use_trans_sid <boolean> erlaubt / verbietet die Übergabe von Sessio IDs per URL (Sicherheitsrisiko!) I weiter Direktiven: in den jeweiligen Kapiteln im Handbuch Christoph Hermann, Dominik Benz, Albert-Ludwigs-Universität Freiburg 15/27

XML Extensible Markup Language mächtiger Mechanismus zum Speichern, Verarbeiten und Austauschen von (semi-)strukturierten Daten viele Techniken "drumherum": DTD / XMLSchema: Definition der erlaubten Struktur eines XML- Dokuments XPath: Sprache zum Adressieren von Teilen eines XML-Dokuments XQuery / XSLT: Transformation von XML XPointer, XUpdate,... verbreitetste, zukunftssicherste, flexibelste Art, strukturierte Daten zu repräsentieren Christoph Hermann, Dominik Benz, Albert-Ludwigs-Universität Freiburg 16/27

XML in PHP Seit PHP5 einiges mehr an XML-Unterstützung SimpleXML-Funktionen: $sxe = simplexml_load_file('text.xml'); foreach ($sxe->elem as $name => $data) print "$name -> $data"; } DomDocument-Klasse $dom = new DomDocument(); $root = $dom->createelement("elem"); $text = $dom->createtextnode("content);... Christoph Hermann, Dominik Benz, Albert-Ludwigs-Universität Freiburg 17/27

PEAR: XML_Serializer Klasse zum Umwandeln von PHP-Datenstrukturen (Arrays) in XML (Serialisieren) umgekehrt auch möglich (XML -> Array, Deserialisieren) require_once 'XML/Serializer.php'; $palette = array('red', 'green', 'blue'); $serializer_options = array ( 'encoding' => 'ISO-8859-1', 'indent' => ' ',... ); $Serializer = &new XML_Serializer($serializer_options); $status = $Serializer->serialize($palette); // after this: error checking header('content-type: text/xml'); echo $Serializer->getSerializedData(); siehe: http://www.sitepoint.com/article/xml-php-pear-xml_serializer Christoph Hermann, Dominik Benz, Albert-Ludwigs-Universität Freiburg 18/27

XML: Übungsvorschlag Einlesen einer XML-Datei (z.b. SVN-History im XML-Format) Generieren eins RSS-Feeds daraus üblicher Weg: Transformation per XSLT auch möglich: deserialisieren in Array, umwandeln, serialisieren Integration des RSS-Feeds als LiveBookmark in Firefox Christoph Hermann, Dominik Benz, Albert-Ludwigs-Universität Freiburg 19/27