Archive

Posts Tagged ‘PHP5’

PHP5 SimpleXML getParent leicht gemacht

December 22nd, 2009 No comments

SimpleXML ist eine unter PHP 5 sehr beliebte XML-API. Der Zugriff auf Elemente und Attribute geht sehr schnell und einfach.

Auf der Suche nach einer Methode um mit SimpleXML vom aktuellen Knoten den Vorgängerknoten zu erhalten (also eine Art SimpleXML::getParent(); ) wurde ich leider nicht fündig, habe aber mit XPath eine denke ich elegante Lösung gefunden:

Ein Beispiel:

<wurzel>
<buch>
<titel>Das ist mein Buch</titel>
<autor>Hans Wurst</autor>
</buch>
<buch>
<titel>Noch ein Buch</titel>
<autor>Martha Musterfrau</autor>
</buch>
</wurzel>

Dann bekommt man das zweite Buch bekanntlich wie folgt:

<?php
$simple=simplexml_load_file(‘/beispiel.xml’);
$buch = $simple->wurzel->buch[1];
echo $buch->titel.’ wurde geschrieben von ‘.$buch->autor;
?>

Und um nun zum Beispiel  von $buch wieder zur Wurzel zu kommen (also ein getParent) hilft der folgende XPath-Trick:

<?php
$simple=simplexml_load_file(‘/beispiel.xml’);
$buch = $simple->wurzel->buch[1];
echo $buch->titel.’ wurde geschrieben von ‘.$buch->autor;
$buch=$buch->xpath(‘../..’);
?>

Post to Twitter Tweet This Post

Categories: Allgemein Tags: ,

Neues in PHP 5.3, Qualitätssicherung in PHP-Projekten und PHPUnit-Testing

April 15th, 2009 No comments

Sebastian Bergmann, der “Erfinder” des genialen PHPUnit-Frameworks, stellt seine Präsentationen online zur Verfügung.

Das Ansehen seiner Präsentationen ist ein Vergnügen und die folgenden beiden Slideshows finde ich persönlich sehr gelungen:

1. New Language Features in PHP 5.3

2. Quality Assurance in PHP Projects

Prädikat: Sehr empfehlenswert!

Post to Twitter Tweet This Post

Categories: Webprogrammierung Tags: , ,

MemCached mit PHP5, Windows und Zend Framework

January 4th, 2009 No comments

Hier mein Erfahrungsbericht zu MemCached unter Windows XP mit PHP 5 und Zend Framework

Was ist MemCached ?

Mit Memcache lassen sich Teile eines Programmes in den Hauptspeicher verlagern, für die z.B. Datenbankzugriffe oder Dateizugriffe notwendig wären. Grenzen hierfür sind nur der physikalische Speicher im Rechner. Da aber beliebig viele Nodes angebunden werden können, ist dadurch die Größe des Caches beliebig skalierbar machen. Die Größe des Hauptspeichers ist bei den Nodes entscheidend, wobei eine schwache CPU Leistung kein Problem darstellt, da diese nur geringfügig beansprucht wird.
Am einfachsten kann man sich memcached als eine rießige Hash Tabelle vorstellen, die über mehrere Nodes verteilt werden kann.

Wann sollte man memcached einsetzen?

  • große Datenbank mit Millionen von Einträgen
  • hoher Traffic mit mehreren Millionen PageImpressions

memcached bringt wirklich nur bei grossen Projekten etwas, bei kleinen oder mittleren Projekten lohnt sich der Einsatz nicht.
Wer jetzt überlegt, ob sein Projekt “groß” ist, kann es hier mit einigen Webseiten vergleichen, die memcached einsetzen: Livejournal, YouTube, Digg, Facebook, Wikipedia, Gamespot, Slashdot, SourceForge, Bloglines, Kayak.
Um auf das Beispiel Facebook näher einzugehen: Facebook setzt 200 dezidierte memcached Server mit jeweils 16 GB Hauptspeicher ein, was eine ungefähre Größe von 3TB memcache ergibt!

Die gute Verbreitung von memcached liegt wohl auch daran, dass sehr viele Clients unterstützt werden. Hierzu gehören PHP, Perl, Python, Ruby, Java, C, C# und wahrscheinlich noch viele mehr.

memcached is a high-performance, distributed memory object caching system, generic in nature, but intended for use in speeding up dynamic web applications by alleviating database load.

Download und Installation unter Windows XP

Ein guter Einstiegspunkt ist [5]. MemCached kommt eigentlich aus der Linux Ecke ist aber mittlerweile auch für Mac und Win portiert verfügbar.

Getestet habe ich mal Version 1.2.6 unter Windows XP von der Website [6].

Nach dem Download extrahiert man die Datei memcached.exe in das Verzeichnis c:\memcached. memcached.exe startet man nun auf der Commandline / Shell oder richtet es sich als Dienst ein (siehe [7] und [8]):

Dienst einrichten

C:>c:\memcached\memcached.exe -d install

Dienst starten / stoppen

C:>net start “memcached Server”

C:>net stop “memcached Server”

Einsatz mit PHP 5 und Zend Framework

Eine kleine Einführung mit Beispielcode findet sich unter [4]. Das Einrichten von MemCached in der php.ini ist sehr einfach insofern man PECL benutzt oder aber die php_memcache.dll herunterlädt (siehe z.B. [9]) genügt die folgende Zeile in der php.ini gefolgt von einem Server Neustart:

extension=php_memcache.dll

Ein kleiner Beispiel-Code der PHP5 und Zend Framework verwendet:

echo ‘Initialisiere Zend_Cache_Backend…<br>’;
$oBackend = new Zend_Cache_Backend_Memcached(
array(
‘servers’ => array( array(
‘host’ => ’127.0.0.1′,
‘port’ => ’11211′
) ),
‘compression’ => true
) );

echo ‘Initialisiere Zend_Logging (Optional aber interessant)…<br>’;
$oCacheLog =  new Zend_Log();
$oCacheLog->addWriter( new Zend_Log_Writer_Stream( ‘e:\aidklinik\logfiles\memcached.log’ ) );

echo ‘Initialisiere Zend_Cache_Frontend…<br>’;
$oFrontend = new Zend_Cache_Core(
array(
‘caching’ => true,
‘cache_id_prefix’ => ‘myApp’,
‘logging’ => true,
‘logger’  => $oCacheLog,
‘write_control’ => true,
‘automatic_serialization’ => true,
‘ignore_user_abort’ => true
) );

echo ‘Initialisiere MemCached-Objekt…<br>’;
$oCache = Zend_Cache::factory( $oFrontend, $oBackend );

echo ‘Stelle Anfrage an Cache…<br>’;
$sCacheId = ‘LargeDataSet’;
$aDataSet=’Fehler’;
if ( ! $oCache->test( $sCacheId ) ) {
echo ‘Nicht im Cache gefunden. Große umständliche Datenbankabfrage nötig!<br>’;
$aDataSet = 42;
$oCache->save( $aDataSet, $sCacheId );
} else {
echo ‘Im Cache gefunden! Performance gesteigert!<br>’;
$aDataSet = $oCache->load( $sCacheId );
}
echo $aDataSet;

Hinweise:

1. Performance-Problem

Bei meinen Testläufen und Zeitmessungen mit XDebug wurde schnell klar: Die systemnahe Verwendung von MemCached ist deutlich(!) performanter als die Verwendung des Zend Frameworks! Zum Einsatz von MemCached ohne Zend Framework siehe [10]. Ich empfehle allen unter PHP5 den direkten Zugriff auf MemCached zu realisieren und nicht das Zend Framework zu verwenden!

2. Stampede-Problem

Terry Chay beschreibt in seinem Blog sehr anschaulich wie er den Stampede-Effekt abfängt sobald ein MemCached-Key abläuft und mehrere User gleichzeitig den Key z.B. über eine Datenbankabfrage neu erstellen wollen:

Stampeding is basically what occurs when you start up the server and have 100,000 concurrent users. If a memcache key is expired (because of a version increment or an expiration), and it is fairly popular a piece of data (say the block list for your web application, or the ad unit for the banner ads), then tons of concurrent processes will see the expired data and will stampede the database with the same request. Databases are slow – which is why we have memcache in the first place – and your site experiences a very nasty hiccup every time this happens.

Absolut lesenswert

Quellen:

  1. http://blog.rakeshxp.com/2007/09/running-memcached-on-windows.html
  2. http://www.splinedancer.com/memcached-win32/
  3. http://jehiah.cz/projects/memcached-win32/
  4. http://ajbrown.org/blog/2008/12/24/memcached-in-php-made-easy-with-zend-framework.html
  5. http://code.google.com/p/memcached/wiki/Start (Version 1.2.6)
  6. http://code.jellycan.com/memcached/ (Version 1.2.6)
  7. http://www.ajohnstone.com/archives/installing-memcached/
  8. http://www.squatlabs.de/webprojekte/performance-optimierung/serverseitige-perfomance-optimierung/memcached-mit-php
  9. http://pureform.wordpress.com/2008/01/10/installing-memcache-on-windows-for-php/
  10. http://de.php.net/memcache
  11. http://terrychay.com/blog/article/keeping-memcache-consistent.shtml

Post to Twitter Tweet This Post

Categories: Allgemein Tags: , , ,

CVS, SVN (SubVersion) und jetzt: GIT

September 17th, 2008 No comments

GIT scheint eindeutig das bessere Quelltextversionierungssystem zu sein (entwickelt und verwendet bei den Linux-Kernel-Entwicklern). Doch überzeugt Euch selbst:

Hintergrund:

YouTube Preview Image

  1. Vortrag von Linus Thorwalls zum Thema GIT bei Google Tech Talks
  2. Vortrag von Randal Schwartz bei Google Tech Talks
  3. GIT erklärt bei Wikipedia Deutschland bzw. Wikipedia Englisch

Installation:

  1. GIT Homepage (Doku, Download, Wiki)
  2. Gegenüberstellung GIT vs. SubVersion (SVN)
  3. GIT Portierung für Windows (ohne CygWin)
  4. GIT für MacOS X

Tutorials:

  1. Deutsches GIT-Tutorial
  2. Englisches GIT-Tutorial von Kernel.org
  3. Cashcourse GIT 4 SVN-Users
  4. GIT Getting started (Windows)
  5. GIT Getting started (Windows GitHub)

Nützliches und Add-Ons:

  1. Noch ein deutscher Blog-Eintrag mit vielen Links und Erfahrungen zu GIT
  2. GIT Cheetah (Beta, Ersatz für TortoiseSVN / TortoiseCVS, Explorer-Integration unter Windows)

Wie sind Eure Erfahrungen ? Welche Meinung habt Ihr zu GIT ?

Post to Twitter Tweet This Post

PHP lernen – fast nebenbei: Jeden Tag eine PHP-Funktion (func-a-day)

April 4th, 2008 No comments

Eine super Webseite:

http://funcaday.com/ liefert kostenlos (auch im RSS-Feed) jeden Tag eine kurze aber umfassende Beschreibung einer zufällig gewählten PHP-Funktion.

So mancher Tipp kommt dabei zu Tage.

Empfehlenswert!

Post to Twitter Tweet This Post

Categories: Links, Webprogrammierung Tags:

Apache und PHP auf dem iPhone

December 26th, 2007 10 comments

Sobald mal im Besitz ein “gehacktes” iPhone’s ist, kann man über den “Installer.app” zahlreiche weitere Softwarepackete installieren. Darunter auch den Apache WebServer und PHP als Skriptsprache.

Hier nun eine kleine Anleitung:

1. Voraussetzungen
Ein gejailbreaktes iPhone mit SSH-Server (für den Zugriff auf das Dateisystem und die Shell) und installiertem “BSD Subsystem”.

2. Grundinstallation
Zunächst installiert man auf dem iPhone via “Installer.app” die Pakete “Apache” und “PHP”. Zum Testen kann man im Safari ja mal http://127.0.0.1 eingeben (localhost geht nicht) oder von einem Mac/PC im gleichen (W)LAN über einen Webbrowser auf die aktuelle IP-Adresse des iPhones (Einstellungen > Wi-Fi > Eigenschaften des aktuell verbundenen WLAN-Netzes) zugreifen.

Der Webserver ist nun also unter http://aktuelleIPAdresseDesiPhones erreichbar. Die Webseiten liegen auf dem iPhone übrigens unter /Library/WebServer/Documents. Die Konfiguration unter /etc/httpd/ bzw. /private/etc/httpd/. Die Logfiles unter /private/log/httpd/ und die Icons unter /usr/share/httpd/icons/. Die Dokumentation theoretisch unter /Library/WebServer/Documents/manual/ (ist aber um Platz zu sparen leer) und CGI-Module werden unter /Library/WebServer/CGI-Executables/ erwartet (auch noch leer).

PHP findet sich auf dem iPhone nun unter /opt/iPhone/.

3. iPhone Apache Webserver konfigurieren
Wie auch sonst üblich muss man nun dem Apache Webserver
via Konfigurationsdatei PHP als Skriptsprache noch beibringen. Hierzu einfach die Datei /etc/httpd/httpd.conf öffnen und die folgenden Zeilen einfügen:

ScriptAlias /php /opt/iphone/bin
AddType application/x-httpd-php .php
Action application/x-httpd-php “/php/php-cgi”

Anschliessend noch die Textdatei /etc/profile öffnen und die Pfadangabe in Zeile 3 um PHP erweitern (sieht dann ungefähr so aus):

PATH = "/bin:/sbin:/usr/bin:/usr/local/bin:/usr/sbin:/opt/iphone/bin"

Jetzt den Webserver auf der Shell des iPhone neu starten (hierzu entweder das via “Installer.app” installierbare VT100-Terminal benutzen oder vom Mac mittels Terminal und installiertem OpenSSH auf dem iPhone als Root verbinden durch Eingabe von ssh root@AktuelleIpAdresseDesiPhones) :

apachectl restart

Oder einfacher: Das iPhone kurz ausschalten und wieder einschalten.

Jetzt noch eine simple PHP-Testseite auf das iPhone schieben:

phpinfo.php:
<?
phpinfo();
?>

speichern als /Libary/Webserver/Documents/phpinfo.php und im Webbrowser aufrufen.

Glückwunsch…!

Tipp:
Mittels “Installer.app” kann man auch ein Tool namens “UiCtl” installieren. Damit kann man sehr einfach die laufenden Daemons / Services auf dem iPhone kontrollieren, also auch den Apache (alias org.apache.httpd). Mittels des Tools “Services” kann man hingegen sehr einfach gezielt EDGE, BT, WLAN und SSH an/aus schalten.

Tipp:
Die Konfigurationsdateien kann man auch prima hier als ZIP herunterladen.
Den Inhalt von “profile” schiebt man auf dem iPhone in den Ordner /private/etc/ und die “httpd.conf” in den Ordner /private/etc/httpd/. Dann das iPhone einmal neu starten – fertig.

Post to Twitter Tweet This Post

Categories: Mac OS X, Netzwerk, iPhone Tags: , ,

PHP geht auf Sendung

September 30th, 2007 No comments

Ab Oktober bietet Zend Technologies unter dem Titel „Zend One“ den ersten kostenfreien Online-Videokanal rund um das Thema PHP. Mit Internetsendungen führen die PHP-Experten in die Arbeit mit den Zend-Entwicklungswerkzeugen ein und bieten Tipps & Tricks für den PHP-Alltag. Zend zeigt die Videos auf Deutsch, Englisch und Französisch. Die Beiträge werden jeweils professionell aufbereitet. Sie können sie über Ihren Webbrowser ansehen. Auch Podcasts sind nach einer Testphase geplant. Für Zuschauer, die ihre Kenntnisse vertiefen wollen, werden in Kürze auch umfangreiche Trainingssessions zur Verfügung stehen.

Quelle: Zend Newsletter

Post to Twitter Tweet This Post

Categories: Allgemein Tags: ,

Zend Certified Engineer PHP5

March 30th, 2007 1 comment

Nach harter Vorbereitung haben mein Kollege und ich heute in einem Pearson Vue Testcenter die Prüfung abgelegt und bestanden. We are now officially allowed to call us “Zend Certified Engineer”.

ZCE ist eine internationale IT-Zertifizierung für die bekannte Programmiersprache PHP.

Mit dieser PHP-Zertifizierung erlangt man den Status eines „Zend Certified Engineer“. Dies bedeutet, dass man in einem öffentlichen Examen, fundierte Programmierkenntnisse in PHP nachgewiesen hat.

Die Prüfung kann in einem Pearson VUE Testzentrum (u.a. in Englisch
und Deutsch) gemacht werden und dauert 90 Minuten bei 70 Fragen
(Multiple Choice und Freitext) (PHP4 / PHP5). Aktuell gibt es die
ZCE-Zertifizierung für PHP4 in deutscher und weiteren Sprachen und seit
kurzem auch für PHP5 in englischer Sprache.

Nach bestandenem Examen wird man namentlich als ZCE in den PHP Yellow Pages der Zend Website aufgelistet.

Post to Twitter Tweet This Post

Categories: Allgemein Tags: , ,

Twitter links powered by Tweet This v1.7.2, a WordPress plugin for Twitter.