Tag: PHP

Online Quell-Code Editor für PHP, CSS, Javascript

Dezember 16th, 2009

Syntaxhighlighting for the PeopleGerade habe ich ein intressantes Tool gefunden. Mit CodeMirror ist es möglich online, direkt im Browser PHP-Quellcode zu bearbeiten. Das funktioniert im Prinzip ähnlich wie bekannte WYSIWYG-Editoren für HTML, nur dass die Textarea um Syntax-Highlighting ergänzt wird.

Es gibt eine klasse Demo in der man die unterschiedlichen Möglichkeiten direkt testen kann.

WordPress Memory Usage gesunken mit PHP 5.2.11

November 20th, 2009

Blog Memory UsageSeit ein paar Stunden sitzt mein Blog auf einem neuen Server. Nach einem Blick in das Admin-Interface, habe ich mich erstmal tierisch gefreut. Vorher hatte ich eine Speicher-Auslastung von ca. 30MB, jetzt sind es im Schnitt nur noch 22MB.

Der neue Server ist natürlich schneller, toller, besser, … aber vor allem nutzt er PHP 5.2.11 unter Debian 5 und nicht mehr 5.2.0 unter Debian 4. Da sonst die technische Basis gleich geblieben ist, gehe ich mal davon aus, dass WordPress unter PHP 5.2.11 weniger Speicher verbraucht als unter 5.2.0.

Hat noch irgendwer diese Erfahrung gemacht?

PHP-Quellcode-Analyse mit nWire for PHP

Oktober 14th, 2009

nWire LogoGestern habe ich über Twitter und die Zend Devzone zufällig von nWire erfahren – und bin begeistert. Was genau nWire ist und wofür man das unbedingt braucht will ich euch hier kurz erklären.

Ich habe häufig das Problem, vorhanden PHP-Quälcode anzupassen, zu optimieren und, ganz wichtig, zu entschlacken. Das ist ne echt mühsame Arbeit. Man geht die Bibliotheken durch und schaut nach ob bestimmte Klassen und Funktionen auch tatsächlich im Projekt verwendet werden, ob Deklarationen doppelt vorhanden sind, und so weiter. nWire nimmt mir dabei ab sofort wahrsinnig viel Arbeit ab, denn es Analysiert den Quellcode im Vorhinein und zeigt mir all die Infos die ich sonst immer zu Fuß erkundet habe direkt unter der bearbeiteten Datei im Eclipse an.

Codeanalyse mit nWire

Schaubild der Arbeitsweise von nWire

nWire hat mehrere Module, die perfekt Hand in Hand arbeiten. Im ersten Schritt untersucht der nWire Analyzer den kompletten Quellcode. Das ist ein Prozess der immer wieder im Hintergrund abläuft, auch bei größeren Projekten die Entwicklung also nicht stört. Diese dabei ermittelten Daten werden im nWire Repository gespeichert.

Jetzt gibt es zwei Komponenten mit denen man als Entwickler zu tun hat. Das wichtigste ist der nWire Navigator. Mit ihm kann man Dateien, Funktionen und Variablen untersuchen. Man findet heraus wo sie deklariert wurden, wo sie überall verwendet werden und welche Abhängigkeiten sie haben. Mit nWire Navigator Search kann man gezielt nach Elementen des Projektes suchen.

Mit dem nWire Visualizer sieht man in einem Netzdiagramm die vom Navigator dargestellten Abhängigkeiten und kann sich über das Netz das ganze Projekt anschauen. Hab ich jetzt noch nicht so benutzt und sehe auch nicht den größeren Sinn dahinter, aber der Navigator ist richtig super.

Ich werde nWire auf jeden Fall die 30 Tage, die man die Trialversion laufen lassen darf ausgiebig testen und dann eventuell ein paar Lizenzen für uns holen.

Lücke in WordPress ermöglicht Aussperren des Admins

August 11th, 2009

Gerade eben gelesen (thx to Spreeblick): Lücke in WordPress ermöglicht Aussperren des Admins.

Also nichts wie los liebe WordPress-Admins, schnell die wp-login.php ändern.

Genaue Infos zum Bug gibt’s von Laurent Gaffié. Der Bug wird aber nicht als kritisch eingestuft, da es einem Angreifer keinen Vorteil verschafft, aber es führt zu ein bisschen Ärger beim Admin.

Der Bug ist übrigens ein sehr gutes Beispiel für unsaubere Programmierung. Ein Eingabeparameter wird lediglich mittels empty($key) überprüft. Sinnvoller als zu überprüfen wie ein Parameter nicht beschaffen sein soll, ist es immer zu überprüfen WIE genau der Inhalt der Variable aussehen muss.

Also zum Beispiel könnte man an dieser Stelle eine Stringconversion und nachträglich eine Überprüfung auf Mindestlänge und enthaltene Zeichen durchführen:

$key = (string) $key;
if (!preg_match("~[A-Za-z0-9]{20}~", $key) ) {
return new WP_Error('invalid_key', __('Invalid key'));
}

Das ganze jetzt so aus der Hand geschrieben, aber sollte so in etwa funktionieren. Unter der Bedingung, dass

$key

immer 20 Zeichen lang ist, was ich jetzt nicht weiß.

Eine Zeile weiter oben heißt es sogar schon:

$key = preg_replace('/[^a-z0-9]/i', '', $key);

Allerdings ohne vorher auf einen String oder die Länge zu überprüfen.

Achja, ist so ein ganz klarer “Mit Java wäre das nicht passiert”-Bug ;-)

Update:

Inzwischen ist das Problem gefixt. Und zwar so:

190 if ( empty( $key ) || !is_string( $key ) )
191 return new WP_Error(‘invalid_key’, __(‘Invalid key’));
192
193 if ( empty($login) || !is_string($login) )
194 return new WP_Error(‘invalid_key’, __(‘Invalid key’));
195
196 $user = $wpdb->get_row($wpdb->prepare(“SELECT * FROM $wpdb->users WHERE user_activation_key = %s AND user_login = %s”, $key, $login));
197 if ( empty( $user ) )
198 return new WP_Error(‘invalid_key’, __(‘Invalid key’));

Das ist auch ok. Überprüfung ob es ein String ist. Auf jeden Fall besser als zu überprüfen ob es kein Array ist.

Zend Framework: PHP-Anwendungen mit dem Zend Framework entwickeln (Gebundene Ausgabe)

April 26th, 2009

Zend Framework: PHP-Anwendungen mit dem Zend Framework entwickeln

mediavalley.de, 04/2008
Das Buch bietet einen optimalen Einstieg in ein sehr professionelles Framework.

Pressestimmen
Empfehlung der Redaktion!

Alle
(more…)

PHP DNS daemon – Der eigene Name-Server in PHP

April 20th, 2009

Gegen die Vergesslichkeit mal hier ein kurzer Artikel zum Thema pinetd und DNS-Server.

Pinetd/2 ist eine Bibliothek mit der verschiedene TCP-Dienste direkt über PHP erstellt werden können. Verschiedene Dienste sind bereits implementiert und können aus dem SVN gezogen werden.
Read the rest of this entry »

Subversion und Trac kostenlos

März 3rd, 2009

Ein kleines Baby von uns ist mal wieder auf dem Weg. Wir werden im Q2/2009 ein kostenfreies Subversion und Trac Hosting anbieten. Zusätzlich gibt es zahlreiche Optionen wie automatisches Deploy, Nutzung einer Datenbank+PHP5.

Später, je nachdem wie der Service angenommen wird, werden wir das Angebot auf diverse andere Scriptsprachen (python, ruby), Deployprozesse (build management, externer deploy per scp oder ftp), Datenbanken (eXist, Xindice, postgresql, weitere SQL und XML-Datenbanken) erweitern.

preg_replace Pattern um URLs im Text zu ersetzen

Dezember 12th, 2008

Wieder mal was aus der Kategorie gesucht und gefunden.

Ich habe ewig lange schon das optimale Pattern für die Ersetzung von URLs innerhalb eines Textes durch einen korrekten Link gesucht. Jetzt endlich glaube ich es gefunden zu haben. Read the rest of this entry »

Schnell-Anzeigen des Tabelleninhalts in phpMyAdmin 3.0

November 4th, 2008

Es gibt ja im pma dieses kleine Icon in der linken Tabellenliste. Wenn man bisher da drauf geklickt hat, dann bekam man rechts sofort den Tabelleninhalt angezeigt. Mit Version 3.0 änderte sich dieses Verhalten standardmäßig. Es wurde (wenn man die config-Dateien beim Upgrade beibehalten hat) immer nur die Struktur angezeigt.

Die Lösung ist recht einfach: Das Icon und der Link sind jetzt über Konfigurationsvariablen einstellbar. Setzt man $cfg[‘LeftDefaultTabTable‘] = ‘sql.php'; (siehe phpMyAdminWiki), dann ist das Verhalten wieder wie in den bisherigen Versionen.

Datenbank mit Liste Regulärer Ausdrücke Regex

September 28th, 2007

Dr.Web gibt mal wieder gute Tipps. Diesmal über zwei gute zu Regular Expressions.

Die Regular Expression Library bietet ein recht umfangreiches Sammelsurium an fertigen Ausdrücken für jeden Anwendungsfall. Natürlich kann man seine eigenen Tüfteleien auch hinzufügen und damit der Allgemeinheit zur Verfügung stellen. Die Verfügbaren Regex werden in Kategorien wie Email, Uri, Numbers, Strings, Dates and Times und Misc eingeordnet und lassen sich darüber auch gut finden. Ein Bewertungssystem, welches falsche oder unbrauchbare Regex aussortiert komplettiert die Seite.

Der Regex-Tester bietet dagegen einen ständig verfügbaren Online-Tester, der die eigenen Patterns gezielt gegen Beispiel-Texte matcht.