1. Einträge getaggt mit ‘PHP’

  2. Relaunch HalloHund.de

    Stefan · 06.05.09, 23:27 Uhr · HalloHund, Konzepte · 1 Kommentar

    Heute haben wir unserem Projekt HalloHund.de einen kleinen Relaunch unterzogen. Wir haben dazu die kompletten Übersichtsseiten neu designed und von Grund auf neu entwickelt, um unseren beiden Hauptzielen Usability- und Performanceoptimierung Rechnung tragen zu können.

    hh_startseite

    » Kompletten Beitrag lesen

  3. Neues MovableType Plugin mt:TemplateModifiedDate und Minify

    Stefan · 22.04.09, 22:37 Uhr · Konzepte, LesMads, Movable Type · Keine Kommentare

    Wir sind ständig am Optimieren der Ladezeiten des Frontends unserer Websites und Blogs. So auch Letztens bei LesMads.de geschehen. Wir versuchen momentan alle Scripte und CSS über Minify zusammenzuführen und die Dateigrößen zu verringern.

    Das Grundprinzip von Minify ist recht einfach: Verschiedene Dateien selben Typs werden in Gruppen zusammengefasst, und diese werden mittels einer URL neu aufgerufen. Nun werden diese Dateien zusammengeführt und verkleinert. Um auch performant zu arbeiten, werden diese Dateien zwischengespeichert (gecached).

    Das ergibt nun folgendes Problem: Wie merkt dieses Script jetzt, wenn eine Änderung in einer der Dateien vorgenommen wurde? Indem man die Dateien versioniert, d.h. einen eindeutige Zeiger mit an die URL hängt. Oftmals werden da zufällige Timestamps genommen, allerdings würden diese das Caching ad absurdum führen. Daher nimmt man bei Nutzung eines CMS entweder – bei vorhandener Versionierung – die Versionierungs-ID, oder aber das letzte Änderungsdatum der Datei.

    Bei unserem oft verwendeten Movable Type (OpenSource) 4+ hat man leider keine Versionierung und einen Standard-MT-Tag der das Modifizerungsdatum eines Templates ermittelt, gibt es ebensowenig. Daher habe ich folgendes kleines Plugin entwickelt, was dieses nun für uns tut:
    » Kompletten Beitrag lesen

  4. Aufbau eines REST Web-Service – Teil 3

    Stefan · 06.12.08, 18:30 Uhr · Konzepte, Tutorials · Keine Kommentare

    Um einen REST Web-Service aufzubauen, eignet sich vor allem ein Framework, das nach dem MVC Pattern arbeitet. Wir haben uns als Default PHP Framework schon vor einiger Zeit für das Zend Framework entschieden, das vor allem durch die vielen mitgelieferten Klassensammlungen hervorsticht, einem dabei allerdings nicht wie bei anderen Frameworks üblich, eine MVC-Nutzung aufzwingt.
    » Kompletten Beitrag lesen

  5. 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));
  6. 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

  7. Programmierrichtlinien / Coding Style Guides

    Stefan · 15.09.08, 16:46 Uhr · Programmierstil · 1 Kommentar

    Heute ist der Zeitpunkt gekommen, unsere Coding Styleguides für unsere Projekte neu anzupassen und neu zu definieren. Im Laufe der Zeit und mit der Anzahl der Projekte kamen immer neue Anforderungen auf uns zu, so dass ich heute die Styles mal wieder aktualisiert und vereinheitlicht habe.
    Wen es interessiert, dem habe ich den Styleguide hier reingepostet:
    » Kompletten Beitrag lesen

  8. Grundsätzliche Überlegungen für einen Web-Service – Teil 1

    Stefan · 28.08.08, 22:17 Uhr · Konzepte, ZendFramework · 2 Kommentare

    Momentan arbeite ich an einem Projekt, das neben den normalen Arbeitsweisen eines CMS zur Verwaltung von Web-Inhalten (Ein-/Ausgabe der Inhalte), Teile dieser Inhalte einem ausgewählten und noch nicht näher spezifiziertem und erlauchtem Kreis von Partnern zur Verfügung gestellt werden sollen.

    Vorweg gesagt: Bisher haben wir noch nicht eine Zeile Code geschrieben, sondern uns eher um grundsätzliche Fragen und Aufgabenstellungen Gedanken gemacht.

    Die Ausgangssituation mit den wichtigsten Eigenschaften ist folgende:
    » Kompletten Beitrag lesen

  9. Demnächst: MT4 Plugin MultiGallery

    Stefan · 19.08.08, 22:48 Uhr · Allgemeines, Movable Type · Keine Kommentare

    Wir nutzen für einige unserer Websites die Blog-Plattform MovableType 4, die sehr schön wartbar und gerade auch für Entwickler und Designer sehr flexibel und mächtig ist.

    Da wir mitunter sehr spezielle Anforderungen an die Websites und deren Features haben, kommen wir oftmals mit Standard-Lösungen nicht weiter. So fehlte uns für die OpenSource Variante von MovableType, die Limitierungen gegenüber der Community-Version im kommerziellen Einsatz besitzt, vor allem ein Plugin, um Bildergalerien innerhalb eines Eintrags frei einzubetten und dazu noch die Möglichkeit, mehrere davon in einen Eintrag zu platzieren. Um dieses Problem zu lösen, habe ich die letzten Wochen ein Plugin entwickelt, das sich in den “Bild einfügen”-Dialog von MovableType setzt und sehr einfach zu handhaben ist:
    » Kompletten Beitrag lesen

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

  11. Endlosschleifen in Zählschleifen verhindern

    Stefan · 09.08.08, 10:32 Uhr · Programmierstil · 2 Kommentare

    Gestern war kein guter Tag: Wir haben ein CMS einer unserer Websites aktualisiert und anfangs ging alles gut, allerdings ca. eine Stunde später ging gar nichts mehr – großes Rätselraten, da lokal alles funktionierte. Nach dem Debuggen der Anwendung haben wir den Übeltäter gefunden: In einem Fremdscript, das schon lange vor dem Update eingesetzt wurde, versteckte sich eine Endlosschleife die nur unter bestimmten Bedingungen eintritt. Folgendes ist passiert:

    Eine Schleife soll aus einer Liste mit Einträgen die letzten drei Einträge ausgeben, die nicht einer bestimmten Kategorie zugeordnet sind. Gelöst wurde das ursprünglich so:

    for ( $i = 0; $i < 3; $i++) {
       if ($entry[$i]["category"] == "xyz") {
          $i––;
          continue;
       }
       // anderer code hier
    }

    Ganz böse Idee! Warum? Sobald ein Eintrag die entsprechende Kategorie aufweist, die ausgelassen werden soll, wird der Schleifenzähler wieder zurückgesetzt. Da der Eintrag allerdings nicht manipuliert wurde und somit immer wieder auf den dafür verantwortlichen Eintrag trifft, der den Schleifenzähler wieder zurücksetzt, entsteht die Endlosschleife.

    Eine kleine Änderung der Schleife löste das Problem: 

    $maxcount = 3;
    $counter = 0;
    $totalEntries = count($entry);
    
    for ($i = 0; $i < $totalEntries; $i++) {
       if ($entry[$i]["category"] == "xyz") {
          continue;
       }
    
       // mach irgendwas
    
       $counter++;
       if ( $counter == $maxcount) {
          break;
       }
    }
    

     
    Ganz wichtig: Schleifenbedingungen in einer Schleife dynamisch zu ändern sollte man nur tun, wenn man weiß, was es für Auswirkungen hat und ist in den meisten Fällen eine blöde Idee! Kommt man trotzdem nicht darum Schleifenbedingungen zu ändern (z.B. in einer While-Schleife die einen bestimmten Zustand erwartet) sollte immer eine Fallback-Lösung implementiert werden, falls Bedingungen nicht eintreffen (z.B. Schleifendurchgänge zählen und ab einem bestimmten Wert aus der Schleife herausspringen)

Gehe zur polyCODER Startseite