Archive for the 'PHP' Category

26
Oct

Apache und PHP unter Windows und Linux

Ein kurzer Test zweier Server mit Hilfe der benchmark.php

Warnung: Dies ist kein repräsentativer Test.

Windows Linux
OS Windows 2003 Server Ubuntu Linux 7.04 Server
CPU P III 800 PIII 650
RAM 512 MB 384 MB
PHP 5.2.3, 60 Sekunden Memory Limit, 16 MB, als Apache Modul 5.2.1, 60 Sekunden Memory Limit, 16 MB, als Apache Modul
Quelle XAMPP Ubuntu
Benchmark simple 2.630
simplecall 54.377
Fatal error: Maximum execution time of 60 seconds exceeded
simple 1.579
simplecall 2.496
simpleucall 3.705
simpleudcall 4.411
mandel 5.148
mandel2 7.282
ackermann(7) 4.600
ary(50000) 0.305
ary2(50000) 0.231
ary3(2000) 3.588
fibo(30) 11.084
hash1(50000) 0.557
hash2(500) 0.604
heapsort(20000) 1.584
matrix(20) 1.246
nestedloop(12) 2.717
sieve(30) 1.469
strcat(200000) 0.423
————————
Total 53.029
26
Oct

Reminder: Ubuntu Server 7.04 aufsetzen

Kurzer Reminder für mich.

  • OS Installieren
  • Feste IP setzten:
    • /etc/network/interfaces
      iface eth0 inet static
      address 192.168.2.5
      netmask 255.255.255.0
      gateway 192.168.2.1
  • Module nachinstallieren
    • sudo apt-get install apache2 php5-common php5 libapache2-mod-php5 php5-mysql php5-pgsql mysql-server mysql-client openssh-server smbfs
    • Mod Rewrite aktivieren: a2enmod rewrite
  • Samba Laufwerk: mount -t smbfs //fileserver/foo /mnt/foo -o username=USER,password=PASS,umask=0002,uid=www-data
    Am besten über ein Startskript und dann per update-rc.d NAME_DES_STARTSKRIPTS_IN_INIT.D defaults 90 aktivieren.
  • DocRoot des Apache auf /mnt/foo zeigen lassen (/etc/apache2/site-enabled/000-default)
  • dyn. mass hosting einrichten
  • Apache neu starten: apache2ctl restart
  • mySQL DB Kennwort vergeben
  • Sicherung der Datenbank einrichten
27
Aug

Froscon 2007

Auch in diesem Jahr war ich wieder auf der Froscon. Dieses Jahr war die Veranstaltung sogar noch besser als im letzten Jahr. Auch dieses Jahr wieder ein kurzer Review der Vorträge.

  • XUL (Arne Blankert, Carola Kummert).
    Die Speaker haben sehr gute Kenntnisse über das Thema. Ich habe vom Praxisteil allerdings etwas anderes erwartet. Vielleicht eine kleine Beispielapplikation, mit einem Formular, das Daten an einen Webservice sendet und das Ergebnis darstellt? Oder ein typisches Grid?
  • PHPCallGraph (Falko Menge).
    Im letzten Jahr beeindruckten Falko Menge und Stefan Marr schon mit dem WSDL Generator. Der PHPCallGraph ist sogar noch beeindruckender. Sehr schön lässt sich die grafische Anzeige für ein Refaktoring oder eine Analyse des Codes nutzen.
  • Logging a database Server (Giuseppe Maxia).
    Auch auf diesen Vortrag habe ich mich schon gefreut. Guiseppe Maxia zeigte verschiedene Möglichkeiten zu Polling, Logging und Monitoring, darunter auch mySQL Proxy.
  • High Traffic Webserver Cluster on a shoestring budget (Ralf Schwöbel).
    Interessante Einblicke in die Server-Struktur von tradebit.com: 1 TB Traffic pro Tag, mehrere Server in Deutschland und den USA, und gerade mal 5000,- USD Kosten pro Monat, dies sind die Eckdaten dieser Webseite. Dieser Vortrag hat sich gelohnt.
  • CouchDB (Jan Lehnhardt).
    Interessantes Projekt. CouchDB:

    • ist nicht relational
    • Schema-frei, d.h. man muss keine Struktur in Form von Spalten definieren
    • besitzt eine native Versionierung der Datensätze
    • kann off- und online Replikation verwenden, d.h. nachträgliche Synchronisation zwischen verschiedenen Datenbandservern
    • verwendet das JSON Format über eine REST-API
    • verwendet Lucene zur Indexierung
    • kann Javascript zur Definition von Views verwenden

    Mehr Infos auf CouchDB/.

  • Open your services to the public.
    Besonders interessant war die GUI zu InstantSVC, dem WSDL Generator für PHP auf Basis der Extended Reflection API.
  • PHPUnit und Selenium.
    Das Thema United Tests ist sehr spannend und gerade in Verbindung mit OOP und Refactoring sehr wichtig. Leider konnte Sebastian Bergmann nur einen sehr groben Überblick über das Thema liefern.
  • Neuschreiben nicht empfohlen.
    Eigentlich ging es bei diesem Vortrag um das Thema Refactoring. Den Proof of Concept blieb der Speaker allerdings - zumindest zum Teil - schuldig. Aber auch Refactoring ist ein komplexes Thema und lässt sich nur schwer in 45 Minuten ausreichend behandeln. Details liefert daher Martin Fowler.
22
Aug

Tests automatisch bei Aufruf über CLI ausführen

aus dem PHP Manual, user contributed notes:
class foo{}

$isCLI = (bool) ('cli'===php_sapi_name());
$isNI = (bool) (__FILE__===realpath(getcwd().DIRECTORY_SEPARATOR.$_SERVER['argv'][0]));
if( $isCLI && $isNI ) {
/* Bei direktem Aufruf aus der Konsole */
}

11
Jul

php.ini bei domainfactory

Beim Provider domainfactory besteht die Möglichkeit eine eigene php.ini zu verwenden. Dazu muss eine php.ini Datei in jedes Verzeichnis kopiert werden, in dem es Auswirkung haben soll. Das folgende Skript erledigt das Kopieren. In Verzeichnisse mit Quota kann die Datei allerdings nicht kopiert werden.

<?php
// Kopiere die Datei php.ini in jedes Verzeichnis
passthru("find . -type d -exec cp php.ini {} \;");
?>

Die aktuelle php.ini von domainfactory kann man mit folgendem Skript auslesen:

<?php
header("Content-type: text/plain");
readfile("/usr/local/lib/php.ini");
?>

18
Apr

HTML in PDF wandeln mit PHP und htmldoc


$filename = '';

header("Content-Type: application/pdf");
header("Content-Disposition: attachment; filename=convertedDocument.pdf");

passthru("/usr/bin/htmldoc -t pdf12 --quiet --size a4 --bodyfont Arial --fontsize 8.0 --no-links --webpage $filename");

HTML2PDF

23
Oct

PHPSecInfo zeigt mögliche Schwachstellen

Das Skript PHPSecInfo vom PHP Security Consortium prüft die PHP Installation auf bekannte Schwächen und gibt hierzu Informationen aus. Die Ausgabe erinnert an die bekannt phpinfo() Ausgabe.

03
Aug

PHP - Schnell oder wartbar?

Den richtigen Weg zwischen “Schnell” und “Wartbar” zu finden ist nicht einfach. Wie wichtig Code-Optimierung ist, sieht man an vielen Beispielen. Während „High End“-Root Server oft schon mit einem einzelnem Forum ausgelastet sind, pflegen wir wesentlich schwächere/ältere Systeme, die eine deutlich höhere Anzahl Anfragen verarbeiten.

Hierzu wieder zwei interessante Links:

Gerade die Datenbank ist ein beliebter Engpass. Deshalb sollte man, wann immer möglich, af den unnötigen Overhead verzichten.

  • Viele Anforderungen lassen sich mit einfachen Dateien lösen. Der direkte Zugriff ist schneller, als die Abfrage einer Datenbank. (Die muss schliesslich auch Dateien öffnen …)
  • Eine RAM Disk beschleunigt den Zugriff auf Dateien enorm.
  • Auch Datenbanken lassen sich komplett in den RAM legen. In mySQL nennt sich das MEMORY Storage Engine.
  • mySQL Tabellen lassen sich Partitionieren. Das beschleunigt den Zugriff auf die Daten mitunter enorm. (Date Tutorial, Range Tutorial)

Gerade die Leistung eines Datenbankservers lässt erheblich nach, sobald die abzufragende Tabelle nicht mehr in den Arbeitsspeicher passt. Da zeigt sich dann auch sehr schnell der Unterschied zwischen einem Join und einem WHERE foo.id=bar.id.

28
Jul

Bambalam PHP 2 EXE Compiler/Embedder

Bambalam ist ein kostenloser PHP2EXE Kompiler/Embedder. Das Programm packt PHP Code inklusive dem PHP Interpreter und verschiedene PHP Module in eine EXE Datei. Das erste kleine Tool für meine Arbeit war schnell ausgedacht und fast genauso schnell programmiert :).

Bambalam lässt sich natürlich wunderbar mit Winbinder o.ä. kombinieren. Einziger Nachteil: Bambalam kann bisher „nur“ mit PHP4 umgehen.

26
Jun

Froscon 2006 Review

Die Froscon war wirklich einen Besuch wert. Vielen Dank an die Organisatoren.

Die Konferenz war wirklich gut organisiert. Überall auf dem Gelände hatte man einen sehr schnellen W-Lan Zugang (Eclipse mit 130Mb in 3 Minuten), die Uni ist wirklich vorbildlich und sogar das Spiel am Samstag wurde im großen Hörsaal übertragen.

Ich war konsequent in sovielen Vorträgen wie möglich. Hier ein kurzer Auszug der Vorträge, die mir besonders in Erinnerung bleiben:

  • Webservices Toolkit für PHP5
    Ein sehr interessantes Projekt, das mit Hilfe der PHP 5 Reflection API z.B. einen WSDL Generator ermöglicht. Infos finden sich bei der PHPUGDO.
  • MySQL Cluster (Geert Vanderkelen)
    Sehr insteressanter Vortrag über die neuen Möglichkeiten eines mySQL Clusters.
  • Pivot Tables in mySQL 5 (Guiseppe Maxia)
    Der Vortrag war unterhaltsam und sehr gut nachvollziehbar. Guiseppe Maxia zeigt eine Möglichkeit, wie man mit mySQL Procedures und Functions automatisiert den SQL Query für eine Pivot Tabelle erzeugt. Wie oft hätte ich dieses Skript schon gebrauchen können! Danke :)
  • PHP best practice (Tobias Schlitt und Kore Nordmann)
    Alle Infos aus diesem Vortrag habe ich schon mindestens 100 mal gehört/gelesen. Für mich war leider nichts Neues dabei. Die Reaktionen und Fragen aus dem Publikum zeigen aber, wie wichtig solche Vorträge sind. :)

Leider habe ich es nicht geschafft, mir die PostgreSQL Vorträge anzusehen.  Aber vielleicht kann ich die PostgreSQL Usergroup zu einem Vortrag in unserer PHPUGFFM einladen?