PHP Blogger

Startseite Schreib mir ne Mail! RSS Abo Webnews

Archiv für Best-Of

Das Singleton Design Pattern mit PHP 4

Ein vielversprechendes Standardmuster ist das Singleton Design Pattern. Es sorgt dafür, das in einer Applikation oder einem Framework immer nur ein und dieselbe Objektinstanz verwendet wird - das aber, so oft man möchte. Eine klassische Verwendung wäre etwa eine Datenbankverbindung. Es wird immer nur eine gleichzeitig benötigt, aber an mehreren Stellen.

Ein Vorteil, der sich auf den 1. Blick ergibt, ist die Performance: Das Objekt muss nur einmal initialisiert werden - eventuelle Datenbankverbindungen werden nur einmal zu Beginn aufgebaut. Auch eine unter Umständen aufwändige Parametrisierung muss nur einmal durchgeführt werden. Und zu guterletzt wird der RAM nicht mit redundaten Infos zugemüllt - was will man mehr als eine schlanke, effiziente Anwendung!?

Um ein stinknormales Objekt zu einem Singleton-Objekt zu machen, ist nur eine einzige Funktion notwendig: “GetInstance”. Wie sie heisst, ist eigentlich egal - als Quasistandard hat sich aber “GetInstance” durchgesetzt. Beim 1. Aufruf erzeugt diese statische Funktion ein neues Objekt und liefert eine Referenz auf dieses zurück.

Den kompletten Artikel lesen »


mehrere IE Versionen parallel installieren

Multiple IEs

Wurde auch schon oft verlinkt - ich denke es ist wichtig und deshalb mach ichs erst recht nochmal: Bei Tredosoft gibts einen praktischen Installer zum downloaden, der es ermöglicht, bequem mehrere Internet Explorer Versionen parallel nebeneinander zu betreiben. Gerade beim IE 6 gibts allerdings kleinere Bugs, die beim Betrieb auftauchen - aber zum Testen einer Website oder Applikation auf unterschiedlichen IE Versionen gibts quasi nix besseres.

Es lohnt übrigens, regelmäßig dort vorbei zu schauen, weil immer wieder mal kleinere oder größere Bugs ausgemerzt werden. Das (seit dem Schreiben des Artikels) letzte Update war am 30.03.2007 - das macht einen prima Eindruck und zeigt Verlässlichkeit!

Laut dem Endbenutzervertrag/EULA von Microsoft geht das Parallelinstallieren übrigens in Ordnung - solange man ein offiziell lizensiertes Betriebssystem hat (und ich meine nicht Linux ;-)

Wichtig: Der Installer läuft noch nicht unter Vista!


PHP Objekt Generator

POG LogoDie Jungs von POG verfolgen eine interessante Idee: Der Code von Standard Objekten sieht jedes Mal ähnlich aus und ist daher reproduzierbar. Aus der Erfahrung heraus, benötigt man immer wieder die selben Funktionen und Angaben, um Daten aus PHP nach MySQL zu schaufeln und umgekehrt.

Das naheliegenste ist natürlich ein Generator, der sauberen Code generiert. Ich hab mir mal den “künstlich” erzeugten Code angeschaut und folgendes festgestellt:

  • Der Code ist sauber strukturiert
  • Die Daten werden validiert
  • Der Code kann für PHP 4 und PHP 5 (bzw. 5.1+) generiert werden
  • Der generierte Code ist als Zip downloadbar
  • Der generierte Code ist via Copy & Paste verwendbar (Im Textarea abgebildet)
  • Im Zip wird ein DB Wrapper für PHP 4 geliefert
  • Für PHP 5.1+ kann auch die native PDO (PHP Data Objects) Klasse verwendet werden
  • Im Zip wird eine kleine Setup Routine mitgeliefert
  • Im Zip ist auch schon der MySQL Code drin

Den kompletten Artikel lesen »


Großer PHP Mailer Vergleich

Spieglein, Spieglein an der Wand, wer ist der beste PHP Mailer im ganzen Land? Um schöne HTML Mails mit PHP rauszuschicken, gibts leider nur eine Handvoll guter Bibliotheken. Ich hab mir mal die 4 besten Mailer Klassen für PHP angeschaut und für Dich bewertet. Aber eins nach dem anderen: Hier erst mal die Liste der Teilnehmer im Wettbewerb um den ersten Platz:

Jeder der Wettbewerber tritt mit Vorteilen und Features an, mit denen die anderen nicht aufwarten. Die Allrounder sind dabei HTML Mime Mail und PHP Mailer, Lib Mail ist das Leichtgewicht unter den Mailern und der Swift Mailer überzeugt mit der üppigen objektorientierten Umsetzung.

Ausser Konkurrenz startet die Klasse miniMail, ausführlich beschrieben im verlinkten Artikel. Sie ist einfach zu benutzen, bietet ein Auto-Newsletter-Feature und unterstützt HTML-Mails, die Priorisierung und Anforderung einer Lesebestätigung.

Den kompletten Artikel lesen »


Welcher Index darfs denn sein?

In dem Artikel “Hast Du auch schön indexiert?” habe ich bereits vor ein paar Tagen über die Notwendigkeit berichtet, von den Index-Funktionen der MySql Datenbank-Engines gebrauch zu machen.

Nur wann entscheidet man sich für welche Indexform? Diese hier stehen für MyISAM (und bis auf Volltext auch für InnoDB) zur Verfügung:

  • Allgemeiner Index (Index)
  • Eindeutiger Index (Unique Index)
  • Volltext Index (Fulltext Index)

Den kompletten Artikel lesen »


Runde Ecken mit CSS

Das Problem jeden CSS Entwicklers ist: Ecken sind eckig und nicht rund. Um Akzente zu setzen kommen nun doch öfter abgerundete Ecken zum Einsatz - Aber wie mit CSS umsetzen, ohne Grafiken zu verwenden?

Mittlerweile gibts viele Javascript Framworks, die das möglich machen. Eines davon ist OpenRico. Wie man auf der Webseite erkennen kann, gibts da allerdings einiges an Effekten, die man mit Rico erzeugen kann… Das bedeutet - weil für die Effekte die Bibliothek benötigt wird - das jedes Mal beim Anschauen einer Webseite knapp 90kb nachgeladen werden müssen.

OpenRico baut übrigens auf der Javascript Bibliothek prototype auf. Die runden Ecken sind aber bei der Gestaltung limitiert. Man kann keine Rahmen definieren, nur welche Ecken die Rundung betrifft und welche Farbe das Objekt hat. Aber eigentlich gehts nicht um Rico, sondern um ShadedBorder - eine kleine Javascript Bibliothek von Steffen Rusitschka.

Den kompletten Artikel lesen »


Daemon Prozesse mit PHP

Schnell mal einen Daemon mit PHP gekloppt? Kein Problem mehr mit dem geilen phpsocketdaemon Projekt von Chris Chabot.

Mit ein paar Zeilen hat man einen Daemon etabliert, der nahezu unbegrenzt erweiterbar ist. Als kleine Zugabe wird im Tar-File gleich mal ein HTTP Server mitgeliefert. Wie die Entwickler selbst sagen, kann man bei Verwendung dieses kleinen Frameworks komplett darauf verzichten, sich mit dem Debuggen der asynchronen Verbindungen und PHP Prozesse zu beschäftigen.

Den kompletten Artikel lesen »


Versteckte Daten absichern mit Tokens

Den Fehler macht jeder Entwickler nur einmal: Sich darauf verlassen, das die User einer Applikation keinen Mist bauen. Sobald man den ersten Vollidiot auf seiner Applikation hat, stellt sich heraus: Alles was keine Validierung hat, wird gnadenlos beim ersten Test plattgemacht.

Wenn man eine Web-Applikation ohne Sessions aufzieht, muss man oft Metainformationen (die man zum Darstellen eines Dialogs benötigt) quer durch alle Formulare schleifen. Da nimmt das Unheil schon seinen Lauf - meist ist man zu faul, um die Daten aus Hiddenfeldern nochmal zu validieren. Und die Rache folgt direkt hinterher, da kannst Du sicher sein.

Den kompletten Artikel lesen »


Hast Du auch schön indexiert?

MySQL Optimierung, Part II: Mit Indizes richtig umgehen… Und immer noch beschäftigt mich das Thema, wie weit man seine MySQL Datenbank optimieren kann. Mittlerweile bin ich auf den Trichter gekommen, das sinnvolle Indizes was bringen könnten.

Wie funktioniert ein Index? Da könnte man natürlich bücherweise drüber referieren - ich beschränke mich einfach auf ein banales Beispiel. Ein Index ist vergleichbar mit einer Inhaltseingabe (grob granulierter Index / Kapitel) und einem Stichwortverzeichnis am Ende eines Buches (fein granulierter Index).

  • Wenn man grob weiß, was man sucht sollte man zunächst ganz hinten im Stichwortverzeichnis suchen, das ist alphabetisch und man findet schnell, was man sucht.
  • Wenn noch die Kapitelnummer weiß, is das Inhaltsverzeichnis eine gute Adresse.

Den kompletten Artikel lesen »


MyISAM oder InnoDB?

Was ist besser? MyISAM oder InnoDB? Früher war die vorgegebene Standard-Storage-Engine von MySql MyISAM. Mittlerweile ist es InnoDB. Aus aktuellem Anlass musste ich mir Gedanken machen, welche Storage-Engine die bessere Wahl ist.

Bislang war InnoDB konfiguriert, aber der Server geht wegen der aufwendigen Speicherung von InnoDB tierisch in die Knie. Zeit, sich mal auf die Vorzüge und Nachteile der jeweiligen Engine zu konzentieren:

Was InnoDB bietet:

  • Transaktionen
  • Locking auf Zeilen Ebene
  • Speicherung in Tablespaces
  • Referenzielle Integrität
  • Primärschlüssel
  • Datensatz-Cache

Jetzt kommt MyISAM:

  • Locking auf Tabellenebene
  • Speicherung in getrennten Dateien (eine pro Tabelle)
  • Volltextindizierung
  • Daten-Komprimierung

Den kompletten Artikel lesen »


« Neuere Artikel