1. Archiv für Kategorie ‘PHP’

  2. 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

  3. 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 private oder protected deklarierte 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 ein var_export drumherum setzen, dann klappt das auch mit der Exception:

    throw new Exception(var_export(serialize($object), true));
  4. PHP5 Snippet: Mehrdimensionale Arrays zu eindimensionalen Arrays

    Stefan · 15.10.08, 18:30 Uhr · PHP · 3 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

  5. 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:

    1. 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.
    2. Wir bauen uns eine rekursive Funktion die man jedes Mal mit dem erzeugten Ergebnis aufruft – das ist leider relativ langsam durch den function call
    3. Wir verwenden Schleifen mit referenzen auf den Urspungsarray

    Und genau den dritten Punkt habe ich folgendermaßen umgesetzt:
    » Kompletten Beitrag lesen

  6. PHP 5.3 alpha1 released

    Stefan · 01.08.08, 12:18 Uhr · Allgemeines, PHP · Keine Kommentare

    PHP hat heute die <a href="http://www.php.net/archive/2008.php#id2008-08-01-1″>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.

Gehe zur polyCODER Startseite