Archiv für die Kategorie ‘PHP’

19. März 2011

Alternative PHP Cache (APC) unter Zend Server Community Edition aktivieren

Alternative PHP Cache (APC) unter Zend Server CE

Alternative PHP Cache (APC) unter Zend Server CE

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.

25. November 2009

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);

14. November 2009

“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:

Warning: Call-time pass-by-reference has been deprecated – [...]

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);

09. September 2009

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.

XDebug als Debugger unter Zend Studio

XDebug als Debugger unter Zend Studio

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.

27. August 2009

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.

24. März 2009

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):

public function set($eigenschaft, $wert)
{
switch ($eigenschaft, $wert)
{
case ‘eigenschaft1′ : $this->eigenschaft1 = $wert;
return true;
break;
case ‘eigenschaft2′ : $this->eigenschaft2 = $wert;
return true;
break;
}
}