Archiv für die Kategorie ‘PHP’
Alternative PHP Cache (APC) unter Zend Server Community Edition aktivieren
In Hinblick auf anstehende Magento Performance-Messungen in Verbindung mit verschiedenen Cache-Backends standen wir unter anderem vor dem Problem, wie sich APC unter Zend Server CE aktivieren lässt.
Im ersten Schritt benötigten wir eine kompilierte Version der aktuellen APC-Sourcen, passend zu unserer eingesetzten PHP-Version (5.3) und Betriebssystemplattform (Windows). Fündig wurden wir schließlich auf der Seite http://downloads.php.net/pierre/. In unserem Fall nutzten wir das Archiv php_apc-20110109-5.3-nts-vc9-x86.zip, welches die neueste Version von APC (3.1.7 beta) bereitstellt.
Nach dem Entpacken des Archivs kopierten wir die enthaltene Datei php_apc.dll in das entsprechende Extension-Verzeichnis des Zend Server CE (standardmäßig also C:\Program Files\Zend\ZendServer\lib\phpext). Anschließend aktivierten wir APC in der php.ini (C:\Program Files\Zend\ZendServer\etc\php.ini) mit der folgenden Zeilen:
extension=php_apc.dll
Nach einem Neustart des Apache-Servers steht APC dann zur Verfügung.
JavaScript: unterminated string literal error
JavaScript gibt sich recht unkooperativ, wenn Strings Zeilenumbrüche enthalten. In der JavaScript-Fehlerkonsole gibt’s dann meist ein Error: “unterminated string literal”.
Sofern JavaScript-Code dynamisch per PHP erzeugt werden soll, ist man also gut beraten, vorher etwaige Zeilenumbrüche zu entfernen. Recht komfortabel gelingt das mit der PHP-Funktion “preg_replace()”. Ein entsprechender Beispiel-Code, der alle Zeilenumbrüche aus einem String entfernt, könnte beispielsweise wie folgt aussehen:
$string = preg_replace(‘/\n|\r\n|\r/’,”,$string);
“Call-time pass-by-reference”-Bugfix für Typo3-Extension danp_tagcloud
Die Version 1.0.1 der Typo3-Extension “Tagclouds for all tables (TIMTAB)” (EXT: danp_tagcloud) erzeugt unter aktuellen PHP-Versionen (5.2.10) – je nach Konfiguration der “error_reporting”-Direktive von PHP – eine Warning-Meldung:
Um dem Spuk ein Ende zu bereiten, genügt es, in Zeile 50 des PHP-Skripts “class.tx_danptagcloud_pi1.php” das “&”-Zeichen zu entfernen. Die korrekte Zeile sieht dann wie folgt aus:
$helper->initGeneral($this);
Zend Debugger für PHP 5.3 nur noch für “non-thread-safe”-Architektur
Bei der Aktualisierung unserer XAMPP-Entwicklungsumgebung auf PHP 5.3 haben wir mit einigem Erstaunen festgestellt, dass Zend Technologies beim hauseigenen Zend Debugger offensichtich die Unterstützung für “thread-safe”-Architekturen still und heimlich gestrichen hat.
Insbesondere für Entwickler und Programmierer, die – wie wir – unter der aktuellen “XAMPP für Windows”-Version 1.7.2 entwickeln, ist das wenig erfreulich, da PHP hier “thread-safe” kompiliert ist und das Laden beziehungsweise Ausführen des Zend Debuggers scheitert. Dementsprechend ist an Remote-Debugging mit dem Zend Debugger in dieser Konstellation nicht zu denken.
Als Debugger-Alternative bietet sich Xdebug an. Bleibt nur der ungleich höhere Implementierungsaufwand. Zudem gilt es zu tricksen, damit XDebug überhaupt als alternativer Debugger im “Preferences”-Menü unter Zend Studio im Einstellungszweig “PHP/Debug” zur Auswahl steht: Dazu gilt es, alle Dateien und Verzeichnisse, die im Plugin-Verzeichnis der IDE liegen und mit “com.zend.php.debug [...]” beginnen, zu “verstecken” beziehungsweise in ein passendes Unterverzeichnis zu verschieben.
PHP-Shell-Skripte mittels Eingabeaufforderung unter XAMPP für Windows ausführen
Häufig ist es erforderlich, PHP-Shell-Skripte, die beispielsweise später regelmäßig per Cronjob ausgeführt werden sollen, während der Entwicklung zu testen. Sofern die Entwicklung auf einem XAMPP-System unter Windows stattfindet, lassen sich .phpsh-Skripte mit folgendem Aufruf aus dem entsprechenden Verzeichnis heraus ([...]\xampp\php) ausführen:
php.exe -f [Pfad/Dateiname]
Eine Übersicht über alle unterstützten Kommandos liefert der Befehl php.exe -h.
PHP: Mit Setter- und Getter-Methoden arbeiten
In der Praxis hat es sich als überaus hilfreich erwiesen, auf Eigenschaften nicht direkt zu zugreifen, sondern diese über entsprechende Setter- und Getter-Methoden anzusprechen.
Die Vorteile liegen auf der Hand: Setter- und Getter-Methoden ermöglichen es Ihnen, die Werte der Eigenschaften vor dem Setzen auf Gültigkeit zu überprüfen und die Namen der Eigenschaften zu verstecken.
In Kombination mit der Deklarierung von Eigenschaften als “private” respektive “protected” ist so in jedem Fall sichergestellt, dass ein Zugriff “von außen”, also außerhalb der Klassendefinition, nur noch über die Setter- und Getter-Methoden erfolgen kann.
Um nicht für jede Eigenschaft separate Setter- und Getter-Methoden entwickeln zu müssen, emfpiehlt sich ein allgemeiner Ansatz (hier für die Setter-Methode und zwei Eigenschaften, wobei diese dann als “protected” oder “private” deklariert werden können):
{
switch ($eigenschaft, $wert)
{
case ‘eigenschaft1′ : $this->eigenschaft1 = $wert;
return true;
break;
case ‘eigenschaft2′ : $this->eigenschaft2 = $wert;
return true;
break;
}
}





