-
Archiv für Kategorie ‘PHP’
-
Probleme bei Datenbankkonvertierung UTF8 und Latin1
Stefan · 14.06.09, 17:28 Uhr · Allgemeines, Movable Type, PHP, Tutorials · Keine Kommentare
Wer kennt es nicht: Man hat eine uralte MySQL-Datenbank die ursprünglich im latin1-Format gespeichert wurde (MySQL Default latin1_swedish, da MySQL eine schwedische Firma ist) und im Laufe der Zeit wurden Tabellen sowohl in latin1_swedish, utf8_unicode und utf8_general gespeichert. Mit viel tricksen kommen zwar noch im Frontend die richtigen Buchstaben raus, aber sobald man ein Datenbank-Upgrade wegen einer neuen Anwendungsversion braucht, hat man ein Problem. » Kompletten Beitrag lesen
-
PHP5 Tipp: Serialisierte Objekte in Exceptions
Stefan · 28.10.08, 18:13 Uhr · Allgemeines, PHP, Programmierstil · Keine Kommentare
Wenn man in PHP5 ordentlich programmiert, dann tut man das in der Regel Objektorientiert und wirft bei Fehlern auch aussagekräftige Exceptions, um spätere Fehlerbehandlungen einfacher zu gestalten.
In einem meiner derzeitigen Projekte übergebe ich als Hilfsmittel hauptsächlich zum Debuggen in der Exception Message auch das serialisierte Objekt, das den Fehler verursacht hat. Solange man nur public Properties im Objekt hat, ist das auch alles kein Problem. Gestutzt hatte ich als die Exception geworfen wurde und mein serialisiertes Objekt einfach nur zur Hälfte in der Message stand. Schuld war der Geltungsbereich von Properties. Eine als
privateoderprotecteddeklarierte Eigenschaft wird serialisiert mit folgenden Flags gekennzeichnet:' . "\0" . 'oder' . "\0" . '*' . "\0" . '. Und genau das scheinen die Exceptions nicht zu mögen.Folgendes Testobjekt
class Test { protected $_property = array( 'id' => 12, 'content' => 'test' ); }erzeugt folgende Ausgabe in der Serialisierung:
'O:4:"Test":1:{s:12:"' . "\0" . '*' . "\0" . '_property";a:2:{s:2:"id";i:12;s:7:"content";s:4:"test";}}'Das Ganze jetzt in einer Exception gethrowt kam bei mir so an:
O:4:"Test":1:{s:12:"Lösung des Ganzen: Beim Throwen einer Exception statt einem
serialize($object)noch zusätzlich einvar_exportdrumherum setzen, dann klappt das auch mit der Exception:throw new Exception(var_export(serialize($object), true));
-
PHP5 Snippet: Mehrdimensionale Arrays zu eindimensionalen Arrays
Stefan · 15.10.08, 18:30 Uhr · PHP · 2 Kommentare
Man braucht immer mal wieder so kleine Helfer in Projekten, da diese eigentlich nützlichen Funktionen in PHP nicht integriert sind. Heute: Wie erzeuge ich aus einem mehrdimensionalen Array einen einfachen eindimensionalen Array der die Inhalte eines bestimmten Array Keys enthält:
» Kompletten Beitrag lesen -
PHP-Tipp: Dateipfad zu Array
Stefan · 11.08.08, 20:20 Uhr · PHP, Programmierstil, Tutorials · Keine Kommentare
In einem Projekt benötigte ich aus diversen Gründen einen mehrdimensionalen Array aus einem Dateipfad. Aufgabenstellung ist recht klar und hört sich eigentlich einfach an, ist es aber leider nicht wirklich. Problem: der Pfad kann je nach Datei eine unterschiedliche Tiefe haben.
Mein Ursprungsarray schaute wie folgt aus:
$elements = array(); $elements["dir1/dir2/dateiname.jpg"] = array("name" => "dateiname.jpg", "filesize" => "12345"); $elements["dir1/dir2/dateiname2.jpg"] = array("name" => "dateiname2.jpg", "filesize" => "21534"); $elements["dir2/dir1/dateiname1.jpg"] = array("name" => "dateiname1.jpg", "filesize" => "12345"); $elements["dir2/dir1/dir1/dateiname1.jpg"] = array("name" => "dateiname1.jpg", "filesize" => "12345"); $elements["dir2/dir2/dateiname1.jpg"] = array("name" => "dateiname1.jpg", "filesize" => "12345");Um daraus nun einen mehrdimensionalen Array zu erstellen gibt es verschiedene Möglichkeiten:
- Angenommen, alle Dateien liegen in gleichen Verzeichnistiefen, so kann man das über verschachtelte for/foreach-Schleifen fest reincodieren – beim obigen Beispiel funktioniert das leider nicht.
- Wir bauen uns eine rekursive Funktion die man jedes Mal mit dem erzeugten Ergebnis aufruft – das ist leider relativ langsam durch den function call
- Wir verwenden Schleifen mit referenzen auf den Urspungsarray
Und genau den dritten Punkt habe ich folgendermaßen umgesetzt:
» Kompletten Beitrag lesen -
PHP 5.3 alpha1 released
Stefan · 01.08.08, 12:18 Uhr · Allgemeines, PHP · Keine Kommentare
PHP hat heute die Version 5.3 alpha1 released, die ein paar schöne Neuerungen wie Namespaces hat. Ich hoffe die Entwicklung schreitet zügig voran, so dass wir PHP 5.3 bald auf Produktivsystemen einsetzen können.
