18.04.2007 - Zend_Db_Table in Javascript

Da hat sich wieder jemand einige Gedanken gemacht, wie man es einem erleichtern kann, in AJAX Applikationen, mit Zend_Db_Table zu arbeiten. Dieser Jemand ist war und ist Maurice Fonk. In seinem Blog beschreibt er sein JsTable getauftes Projekt, wie folgt:

JsTable is a Prototype class that allows you to work with Zend_Db_Table objects directly from Javascript. It has mechanisms for basic communication with a server that holds the ‘real’ models. It gets it’s information in Json, either synchronously or asynchronously.

Ich finde dieses Projekt sehr interessant, jedoch hat es, wie schon im Artikel beschrieben und im ersten Kommentar von Greg noch einige Sicherheitsprobleme, wodurch ich derzeit noch jedem davon abrate es zu nutzen. Testen kann man es aber für den öffentlichen Einsatz ist es meiner Meinung noch nicht geeignet. Ich habe mir das für das Projekt mal ein Lesezeichen angelegt und ich werde auch die Diskussion in der Zend Framework Mailinglist verfolgen.


17.04.2007 - Flabben nun mit IBSN

Durch ein Issue bezüglich einer ISBN Validierung fürs Zend Framework bin ich gestern durch Zufall auf die IBSN (=Internation Blog Serial Number, Homepage) gekommen. Daraufhin habe ich mir für diesen Blog eine angelegt. Zu sehen ist sie rechts in der Navigationsleiste. Klickt man auf die IBSN, so kommt man zu meiner IBSN Registrierung für diesen Blog.


14.03.2007 - Bug Report ZF-1018 fixed

18

In der Revision 3916 des Zend Frameworks wurde der, von mir gemeldete, Bug gefixed. Beim Testen von Zend_XmlRpc_Server hatte ich das Problem, dass meine Requests nicht angenommen wurden. Fehler war dahingehend, dass alle Parameter als "void" gekennzeichnet wurde und dem war eben nicht so und zudem gibt es keine Fuktionen/Methoden mit mehr als einem "void" in der Parameterliste. Nach langem hin und her kam heraus, dass der Fehler daran liegt, dass ich bei den phpDoc´s in meinem Code mehrere Leerzeichen zwischen dem Tag und dem Datentyp bzw. der Beschreibung geschrieben habe. Die Lösung war dann schnell geschaffen, denn es fehlten lediglich an 4 Stellen im Code in regulären Ausdrücken jeweils ein "+" (Plus).

Dahingehend ein Danke an Matthew Weier O'Phinney, der diesen Bug heute Mittag gefixed und ins SVN eingespielt hat.


07.03.2007 - Guten Morgen

Ich weiss nicht wieso, aber irgendwie bin ich heute morgen aufgestanden, habe geduscht und mich fertig gemacht und schau dann auf die Uhr und sehe, dass ich normal um diese Uhrzeit noch nicht mal wach bin. Keine Ahnung, wieso ich heute so früh wach bin und nichtmal auf die Uhr geschaut habe.

Naja ich habe die Zeit genutzt und nochmal zwei Tests von Zend_XmlRpc_Server zu machen und habe diese an die Zend Framework Mailinglist geschick, damit Matthew Weier O'Phinney sich diese anschauen kann, denn laut seiner letzten Mail zu dem Thema laufen meine Codes bei ihm, aber komischerweise nicht bei mir.


06.03.2007 - Wo bin ich!?

Gute Frage, aber derzeit habe ich nicht viel zu erzählen und ich arbeite grade öfters an einer neuen Version des Blogs und versuche den Blog in den nächsten 1-2 Monaten auf einen Stand zu haben, dass man ihn auch mal Live testen kann. Derzeit sitze ich an einem XML-RPC Backend für die Administration, jedoch will die Zend_XmlRpc_Server Klasse meine Requests nicht so handhaben, wie ich es will und von daher hakt es da ein wenig. Zudem musste ich vor paar Tagen Anpassungen an meinem Code machen, da z.B. Zend_Filter::Int() nun zu Zend_Filter_Int::filter() geworden ist und das musste erstmal ausgebessert werden.

Ich werde mal schauen, ob ich in nächster Zeit vielleicht mal öfters über die Neuerungen an meinen Blog berichte, denn da sind doch schon einige spannende Sachen bei.


22.02.2007 - Zend Framework 0.8.0 ist da

18

Seit gestern gibt es ein neues Release des [url=http://framework.zend.com/]Zend Frameworks[/url]. Wenn man sich mal die [url=http://framework.zend.com/changelog]Changelog[/url] anschaut, dann sieht man mal wie da derzeit reingehauen wird um bald endlich die Version 1.0 zu präsentieren. Diese soll, laut Roadmap, Ende März kommen und dann wird das Zend Framework sicherlich nochmal einen großen Schub bekommen, denn dann ist das Framework endlich auf einen Stand, mit dem man produktiv arbeiten können soll. Das wird dahingehend noch sehr viele hinzuziehen, die sich bisher noch nicht getraut haben was damit zu machen, da sich noch zu oft was ändert.

Wenn man sich mal meinen eingesetzte Version des Zend Frameworks anschaut, dann sieht man mal wie alt die Version ist. Ich nutze noch die Version 0.2.0 mit Revision 1478 und aktuell gibt es nun Version 0.8.0 mit Revision um 3500.

Stolz auf diesen Release bin ich auch, da zwei meiner Reports für diese Version beachtet wurden und sogar geschriebener Patch (#ZF-728) für Zend_Log_Adapter_Db eingespielt wurde. Somit gehört mir zumindest schonmal eine Zeile im Code des Zend Frameworks.


08.02.2007 - Privates mal ganz Öffentlich II

Hinweis: Dieser Artikel bezieht sich auf Privates mal ganz Öffentlich.

Aus dem deutschen Zend Framework Forum ging die Diskussion nun in die Mailinglist des Zend Frameworks und das eigentliche Problem hat sich herausgefiltert. Der Fehler ist nicht, dass man private Eigenschaften, die Objekte beinhalten, manipulieren kann, sondern dass bei einem Array-Typecast die protected und private Eigenschaften auch rüberkommen. Bei dem Typecast sollten theoretisch nur als public deklarierte Eigenschaften in einen Array umgewandelt werden, dann würde sich das genauso verhalten wie folgender Code:

<?php

class ForeachTest {
    public 
$a 'test_a';
    protected 
$b 'test_b';
    private 
$c 'test_c';
}

$oForeachTest = new ForeachTest;
foreach (
$oForeachTest as $sKey => $mValue) {
    echo 
$sKey ' => ' $mValue;
}

?>

Bei diesem Code werden nur die öffentlichen (public) Eigenschaften beachtet. Ein Array-Typecast soll sich also genau verhalten und nur die public Eigenschaften beinhalten. Mal schauen was draus wird. Ich hoffe jedoch, dass das anerkannt wird.

a => test_a

08.02.2007 - Privates mal ganz Öffentlich

45

Hinweis: Dieser Artikel wird weitergeführt in Privates mal ganz Öffentlich II.

Programmierern die sich schonmal mit der Objektorientierten Programmierung auseinandergesetzt haben, wissen sicherlich was der Unterschied der verschiedenen Sichbarkeiten (public, protected, private) ist. Diese Sichbarkeiten wurden aus dem Grunde geschaffen um den Zugriff auf einzelne Eigenschaften und Methoden nur für bestimmte Zwecke freizugeben. Für die, die nun noch nicht wissen, was die Sichbarkeiten genau sind, nochmal ein kleiner Exkurs.

Es gibt in PHP und vielen anderen Sprachen drei Sichbarkeiten (andere Sprachen können auch mehr haben). Zu diesen Sichtbarkeiten zählen public (öffentlich), protected (geschützt) und private (privat). Alle Methoden und Eigenschaften in Klassen die als public deklariert sind können innerhalb der Klasse sowie von ausserhalb durch eine Instanz genutzt werden. Sie sind für alle öffentlich verfügbar. Ist eine Methode oder eine Eigenschaft als protected deklariert, so ist sie nur aus der eigentlichen Klasse und allen erbenden Klassen verfügbar. Der Zugriff von aussen ist somit nicht mehr möglich. Als private deklarierte Methoden und Eigenschaften gelten nur in der Klasse, in der sie deklariert wurden.

Bei PHP gab es hinsicht auf die Sichtbarkeit schon einige Diskussionen, aber nun habe ich vor einigen Wochen durch Zufall herausbekommen, wie man an protected und private Eigenschaften kommt. Wenn man nun ein wenig zurückdenkt, so habe ich erklärt, dass sie nur für die eigentliche Klasse und alle erbenden Klassen verfügbar sind. Aufgefallen ist mir dies beim Arbeiten mit der Zend_Config-Klasse bei der ich ein Objekt zu einem Array umwandeln wollte und einfach mal einen Array-Typecast genutzt habe. Primär war mir dabei aufgefallen, dass mir bei einer Ausgabe mittels Zend::dump() bzw. var_dump() irgendwelche Zeichen untergekommen waren, die es sogar verhinderten die Ausgabe in den Zwischenspeicher zu kopieren. Erst dachten wir, dass es an einem falschen Zeichensatz liegt, aber es wird wohl mitunter ein Sicherheitsaspekt sein. Trotz dessen habe ich weitergeschaut und herausgefunden, wie man an, als protected und private deklarierte, Eigenschaften kommt. Am besten kann ich das mit einem Beispiel erklären.

<?php

class Visibility
{
    private 
$privProp;
    public function 
__construct() {
        
$this->privProp = new stdClass;
        
$this->privProp->bImportant true;
    }
    public function 
isImportant() {
        return 
$this->privProp->bImportant;
    }
}

?>

Hier haben wir die Visibility (engl. Sichtbarkeit) Klasse, die eine private Eigenschaft beinhaltet. Beim Erzeugen einer Instanz der Klasse wird im Konstruktor die private Eigenschaft privProp mit einem Objekt der Klasse stdClass gefüllt. Diesem Objekt geben wir dann ebenfalls noch eine Eigenschaft (public) namens bImportant. Sie beinhaltet einen boolschen Wert und ist wichtig für den weiteren Verlauf. Okay, in diesem Beispiel ist diese Eigenschaft eher unwichtig aber wir stellen uns nun einmal vor, dass dort ein wichtiger Status gespeichert wurde, der unbedingt für den weiteren Verlauf benötigt wird. Die Methode isImportant() macht nichts als den Wert der Eigenschaft bImportant zurückzugeben. Wir erwarten nun also, dass die Methode true zurückgibt. Hier nun ein weiteres Beispiel:

<?php

$oVisibility 
= new Visibility;
var_dump($oVisibility->isImportant()); // true

?>

Das hat ja bis dahin super geklappt, die Methode gibt, wie erwartet true zurück. Laut der Definition der Sichtbarkeit müsste man sich in diesem Fall voll und ganz darauf verlassen können, denn solange der Code der Klasse nicht geändert wird, kann da auch nichts passieren. Falsch gedacht, denn genau das können wir nicht. Wir können uns noch nicht mal bei private Eigenschaften darauf verlassen, dass drin steht, was vorher mal drin stand. Man nimmt also die Variable $oVisibility und wandelt das beinhaltete Objekt in einen Array:

$aProperties = (array) $oVisibility;

Eine Ausgabe von $aProperties spare ich mir nun, da es genau bei dieser Ausgabe vorkommt, dass da irgendwelche kryptischen Zeichen drin sind, die es verhindern die Ausgabe im Zwischenspeicher zu speichern. Dies tritt aber nur bei private und protected Eigenschaften auf. Soweit sogut, jetzt müssen wir an die Eigenschaft kommen und sie manipulieren. Einen direkten Zugriff haben wir durch die kryptischen Zeichen nicht, also müssen wir alle Eigenschaften durchlaufen und prüfen, ob wir ein Objekt finden, das eine Instanz der Klasse stdClass ist. Haben wir es gefunden, können wir es manipulieren.

<?php

foreach ($aProperties as $mProperty) {
    if (
is_object($mProperty) && ($mProperty instanceof stdClass)) {
        
$mProperty->bImportant false;
    }
}

?>

So, das wärs schon. Haben wir die Eigenschaft gefunden überschreiben wir die Eigenschaft bImportant durch ein false. Fügen wir diesen Codeblock nun in unser Beispiel ein haben wir ein komplett anderes Bild:

<?php

$oVisibility 
= new Visibility;
foreach (
$aProperties as $mProperty) {
    if (
is_object($mProperty) && ($mProperty instanceof stdClass)) {
        
$mProperty->bImportant false;
    }
}
var_dump($oVisibility->isImportant()); // false

?>

Wieso ist denn nun die Ausgabe von isImportant() nicht mehr true? Ja, wie kommt das wohl? Wir haben sie von aussen manipuliert, ohne die eigentliche Klasse zu verändern. Nun ist die Frage, ob dies wirklich im Sinne der PHP Entwickler ist, dass man trotz der Sichtbarkeit, als private und protected deklarierte Eigenschaften manipulieren kann. Meiner Meinung nach ist das ein Bug und sollte behoben werden.


26.12.2006 - Deutsches ZF Forum

Seit einigen Wochen gibt es nun für das Zend Framework, ein kleines deutsches Forum für Anfänger bis ZF-Entwickler, in dem man sich über Neuerungen und Ideen zum Zend Framework unterhalten kann, aber auch seine eigenen Projekte, welche mit dem Zend Framework entwickelt werden, planen und diskutieren kann.

Dieser meinige Blog war Anfangs nur ein erster Test des Zend Frameworks und hat bisher auch noch nicht viel andrang bekommen an Lesern und daher kann ich es mir erlauben meinen Blog nochmal neu aufzubauen. Diese Neustrukturierung werde ich anfangs mit den Benutzern im Forum durchdiskutieren, damit die neue Version des Blogs in Sachen Programmierung auch sehr viel eleganter und übersichtlicher wird. Es wird einige neue Sektionen geben, ich werde ein wenig aufräumen und Funktionalitäten des Blogs ausbessern und stabiler gestalten.


07.12.2006 - Bug in PHP 5.1.2

Heute habe ich einen kleinen Bug in PHP entdeckt, welcher in späteren Versionen jedoch schon gefixed wurde. Fehler ist nur auf Microsoft Windows XP Prof. SP2 getestet.

<?php

    $test 
= array(
        
'data' => array(
            
'persons' => array(
                array(), array(), array()
            )
        )
    );

    foreach(
$test->data->persons as $aPerson) {
        
// ...
    
}

?>

Wird also versucht auf einen Array zuzugreifen, als wäre es ein Objekt, so stürzt sich PHP mit folgender Meldung über den Jordan:

Die Anweisung in "0x10008f4a" verweist auf Speicher in "0x00000000". Der Vorgang "written" konnte nicht auf dem Speicher durchgeführt werden.

Ich habe diesen Bug in den Versionen 4.4.0, 5.1.4 und 5.2.0 getestet und es scheint ein Fehler in der Version 5.1.2 zu sein. Ein Update hilft also.


13.11.2006 - Fehler bei der Suche

Aufgrund eines, mir noch nicht bekannten Fehlers, kann derzeit die Suche nicht benutzt werden. Aus irgend einem Grund, kann der Lucene Index nicht erstellt werden (auch nicht als root).

Update: Komischerweise geht es nun wieder. Wird wohl ein temporäres Problem gewesen sein. Konnte auch nach langem Suchen keinen Fehler finden, denn am Skript selbst habe ich schon lange Zeit nichts gemacht und nach dem Update, des Zend Frameworks, lief das Skript ja auch noch. Naja, nun läuft wieder alles so, wie es soll.


07.11.2006 - PHP Update installiert

/blog/image/36

Nach langem rumprobieren habe ich es endlich geschafft PHP5.2 zu installieren. Ich habe bei der Installation auch noch einige Extensions, die ich nicht benötige rausgenommen. Zusätzlich habe ich die Extension Suhosin installiert. Auf der Internetseite wird Suhosin wie folgt beschrieben:

Suhosin is an advanced protection system for PHP installations. It was designed to protect servers and users from known and unknown flaws in PHP applications and the PHP core. Suhosin comes in two independent parts, that can be used separately or in combination. [...]

Weitere Informationen können auf der Internetseite von Suhosin nachgesehen werden.


07.11.2006 - Update des Zend Frameworks

18

So, ich habe nun mal wieder die aktuellste Version des Zend Frameworks eingespielt, da vor kurzem die Version 0.2 veröffentlicht wurde. Bisher habe ich keine Fehler finden können, wie beim letzten Update. Mal schauen ob es da irgendwas gibt, was nicht mehr so läuft wie zuvor. In der ChangeLog konnte ich auch nichts direkt finden, was mich betreffen könnte bzw. sich schecht auswirken könnte.


13.10.2006 - Suche integriert

29

Ich saß gestern sehr lange dran eine geeignete Lösung zu finden, die Einträge in den Index zu packen, aber derzeit unterstützt der Index noch keine Umlaute, also versuchte ich das ganze irgendwie umzuwandeln, sodass es ANSI ist aber nicht wollte so richtig funktionieren. Also habe ich gestern Abend eine E-Mail in die Zend Framework Mailinglist geschrieben. Vor ca. 1 Stunde kam dann eine E-Mail von Natalie Kather, die für die NorthClick GmbH arbeitet. Die NorthClick GmbH arbeitet an einem CMS in das die Java Lucene Lösung des Zend Frameworks integriert werden soll und dabei hatten sie die selben Probleme wie ich. Sie hat darauf einen Artikel geschrieben, in dem sie erklärt, wie man die Einträge passend für den Index konvertiert. Diese habe ich gemacht und es funktioniert super. Ihr könnt ganz einfach einen nach einem Suchbegriff suchen. Falls ihr ein Suchebgriff in den Titeln der Einträge suchen wollt, dann müsst ihr dem Suchbegriff ein "title:" anhängen. Also:

title:umstellung

Dieser Suchstring findet dann alle Einträge, die im Titel den Begiff "umstellung" haben. Wenn ihr nach aktuellen Einträgen suchen wollt, muss ich euch vorerst noch sagen, dass ich mir noch über das automatische indizieren ein paar Gedanken machen muss. Bis dahin müsst ihr euch erstmal mit den Artikeln vor diesem Eintrag zufrieden geben.