Browsing all articles tagged with php
8
Okt
2011

YAP ist (zumindest vorerst) der Name des OpenSource Project Management Systems, welches ich entwickeln möchte.

Angetrieben durch die Tatsache, dass keines der OpenSource Systeme mich wirklich zufrieden gestellt hat und meine Anforderungen abdecken konnte, hatte ich mich dazu entschieden mir selbst eines zu schreiben.

Zur Zeit verwende ich Collabtive. Das war das Beste, was ich finden konnte, aber wirklich glücklich macht es mich auf Dauer auch nicht.

Ich habe nun einige Zeit damit verbracht über das Framework nachzudenken. Und hatte mich letztendlich für Symfony2 entschieden. Warum? Das Zend Framework 1 ist praktisch deprecated, dennoch steht das ZF2 noch nicht als finale Version zur Verfügung. Daher fällt beides für mich flach. Ich hatte also die Wahl zwischen Symfony2, Codeigniter2, Kohana und den zehntausend kleinen Frameworks, die so im Web rumschwirren. Gegen die “kleinen” Frameworks spricht einfach die fehlende Communitygröße.
Ergo blieben Symfony2 und Codeigniter2 übrig.  Die Wahl auf Symfony viel einfach aus Sympathie-Gründen. Das Framework arbeitet mit Namespaces und das macht auf mich einfach einen moderneren Eindruck. Annsonsten geben sich die beiden Frameworks nicht viel.

Ich lese mich im Moment etwas ein und werde die nächsten Tage mal ein wenig Code in das YAP GitHub Repository pushen. Und ich werde bei Gelegenheit mal ein Konzept schreiben, wie ich mir das Ganze vorstelle.

read more
8
Okt
2011

Heute gibts hier für euch eine kleine Link-Sammlung für Zend Framework. Tutorials, Dokumentationen, Blogs, alles was das Entwickler-Herz begehrt ;)

 

Offizielles

(weiterlesen …)

read more
21
Sep
2011

Übersicht

Installation

Im Gegenteil zu Apache oder Lighttpd erzeugt nginx selbst keine FastCGI Prozesse. Diese müssen seperat gestartet werden. Hierzu gibt es verschiedene Möglichkeiten. Glücklicherweise bringt PHP5 einen FastCGI Process Manager mit: PHP-FPM. Dieser erzeugt automatisch so viele FastCGI-Prozesse wie in der Umgebungsvariable PHP_FCGI_CHILDREN definiert wurde. Hierfür benötigt man lediglich das Paket php5-cgi und php5-fpm.

Also erstmal alle benötigten Pakete Installlieren:

# apt-get install php5 php5-cli php5-cgi php5-suhosin php5-fpm

Danach starte ich den Prozess Manager:

# /etc/init.d/php5-fpm restart
Jetzt lege ich mir wieder eine Include Datei an für die PHP Konfiguration. Diese muss nämlich nun in jeden location-Block rein. Das möchte ich aber nicht.
read more
18
Sep
2011

Übersicht

 

In diesem und den folgenden Beiträgen (es gibt jeden Tag einen) berichte ich euch ein wenig über meine Migration von Apache zu Nginx. Es war eigentlich nicht beabsichtigt, dass da ganze fünf Beiträge draus werden, aber irgendwie wurde es doch ziemlich viel Text und das war dann für einen einzelnen Artikel etwas zu viel. Da könnte man ja fast den Eindruck bekommen, ich würde gerne schreiben … Keine Angst, das einzige was ich gerne in großen Mengen schreibe ist Programmcode ;)

However, ich hatte meinen VPS (Debian 6) bisher immer mit dem apache2 betrieben und auch meine Entwicklungsumgebung auf meinem Desktop und dem Notebook ebenfalls. Das hatte mehrere Gründe. Zum Einen bin ich mit dem Apache aufgewachsen und hatte eigentlich nie etwas anderes verwendet. Ich war auch immer sehr zufrieden mit dem Apachen. Es ist ein guter Webserver mit einer großen Auswahl an mächtigen Modulen und er ist sehr leicht zu konfigurieren. Da ich aber ab und an gerne etwas Neues ausprobiere und immer Spaß daran habe, an meinem Server zu schrauben (auf Software-Ebene), wollte ich mal einen anderen Webserver ausprobieren. Genaugenommen war das Projekt yaana.de einer der Auslöser. Ich möchte da noch etwas Performance aus dem Server quetschen. Und dafür sollte ich mich zu allererst vom Apachen verabschieden.

Zur Auswahl stehen also – neben dem Apachen – Lighttpd und Nginx (ausgesprochen: engine-x).

(weiterlesen …)

read more
12
Aug
2011

Es gab in meinem Leben bisher nichts, womit ich so viel Zeit verschwendet habe wie mit Encoding Problemen.

Für mein aktuelles Projekt entwickle ich zur Zeit einen crawler, der Websites zieht und analysiert. Natürlich bin ich da direkt auf sämtliche Encoding-Problemchen gestoßen, die man sich nur vorstellen kann und hatte unglaublich viel Spaß damit …

Ich verwende das Zend Framework und daher entsprechend die Klasse Zend_Http_Client um die HTTP-Requests abzusetzen.
Danach suche ich den Inhalt der Seite raus, sodass lediglich ein String ohne HTML-Tags und damit reinem Text übrig bleibt.
Gebe ich mir diesen nun einfach auf die Shell aus, stimmt das Encoding manchmal und manchmal nicht. Das sieht man dann immer schön an den kaputten Umlauten.

Also habe ich eine Funktion gebraucht, die das Encoding eines Strings konvertiert … Tja, wenn es denn so einfach wäre …
Die letzten Tage habe ich rund 20 Stunden damit verbracht eine Funktion zu schreiben, welche dafür sorgt, dass der String, der am Ende rauskommt, sauber dargestellt wird – unabhängig davon, was rein kommt. Das Problem hier war in erster Linie, dass selbst Strings, die sich als UTF-8 ausgegeben haben und von denen sogar mb_check_encoding() behauptet hat, es sei alles in bester Ordnung, haben kaputte Umlaute mit sich getragen. Also darauf konnte man sich schonmal gar nicht verlassen.

Ich möchte hier das Ergebnis meiner Arbeit mit euch teilen. Nicht erschrecken, es ist keine saubere Lösung (die sauberen Implementierungen haben allesamt nicht funktioniert). Der Code deckt auch nicht alle denkbaren Fälle ab, aber ich konnte bisher jeden beliebigen kaputten String mit deutschem Text und explodierten Umlauten in einen lesbaren String mit intakten Umlauten konvertieren. Da das mehrere 100 Texte aus verschiedensten Quellen aus dem Netz waren, behaupte ich mal, dass der Code recht brauchbar ist. Im Zweifelsfall dient er als gute Basis für eine umfassendere Implementierung.

Der Methode magicFixStringEncoding() kann man also einen beliebigen  String übergeben unabhängig davon ob er völlig in Ordnung ist oder total verstümmelt. Die Rückgabe der Methode sollte immer einen sauberen String mit funktionierenden Umlauten entsprechen.

Für Verbesserungsvorschläge bin ich jeder Zeit offen. Annsonsten viel Spaß denen, die den Code gebrauchen können ;)

 

 

class ITWS_Tool {
	public static function magicFixStringEncoding($strInput) {
		if (preg_match('/[üäöÄÖÜß]/i', $strInput) === 1) {
			$strInput = self::convertEncoding($strInput, 'UTF-8');

			if (strlen(utf8_decode($strInput)) !== strlen(utf8_decode(utf8_decode($strInput)))) {
				$strInput = utf8_decode($strInput);
			}
		} else {
			$strInput = self::convertEncoding($strInput, 'UTF-8', 'ISO-8859-15');
		}

        return $strInput;
    }

    public static function convertEncoding($strInput, $toEncoding, $fromEncoding = '') {
        if ($fromEncoding == '') {
            $fromEncoding = mb_detect_encoding($strInput, array('UTF-8', 'ASCII', 'ISO-8859-1', 'JIS', 'EUC-JP', 'SJIS'), true);
		}

        if ($fromEncoding == $toEncoding) {
            return $strInput;
		}

        return mb_convert_encoding($strInput, $toEncoding, $fromEncoding);
    }
}
read more
11
Aug
2011

Da ich in letzter Zeit zunehmends von Eclipse genervt bin (bzw. eigentlich allem, was mit Java zu tun hat, weils einfach der letzte Mist ist), habe ich mal netbeans nochmal angetestet. Zu verlieren hatte ich ja nichts, Eclipse war schließlich eben zum 5. mal heute abgestürzt und mir hat einfach die Motivation gefehlt es wieder zu starten.

Netbeans hatte ich vor zwei Jahren schonmal ausprobiert, war da aber von dem Layout der Benutzeroberfläche wenig begeistert – um nicht zu sagen, sie war hässlich. Das hat sich mittlerweile geändert. Fein.

Positiv beeindruckt hat mich erstmal die Tatsache, dass es ein Git Plugin gab. Dabei sollte es aber nicht bleiben, denn das importiere Projekt hat er direkt als Git Projekt und als Zend Framework Projekt erkannt. Abgefahren. Eclipse wusste das nichtmal nachdem ich es ihm klar gemacht habe. Egal. Ich habe alle Konfig-Einstellungen, die ich benötigt habe auch direkt gefunden. Super.

Besonders gefällt mir aber die Performance. Macht richtig Spaß damit zu arbeite, wenn man Eclipse gewohnt ist. Bis die JVM das zweit mal abgeraucht ist, habe ich etwas rumgespielt. Danach war ich von Java wieder so genervt, dass ich keine Lust mehr hatte.  Dennoch bin ich von Netbeans bisher beeindruckt. Die IDE bietet also durchaus das Potential Eclipse PDT als preferierte PHP IDE abzulösen.

Nur hoffen, dass Oracle endlich mal ein wenig an der Stabilität der JVM arbeitet, denn so macht das echt keinen Spaß. Aber was will man von Java auch anderes erwarten ;)

 

over and out

read more
3
Jun
2011

Im nächsten PHP Release gibt es ein neues Feature für horizontalen Code Reuse: sog. Traits (engl. Merkmal, Charakterzug). Was das ist und wie es funktioniert, erfahrt ihr im folgenden Artikel.

Vererbung: Vertikaler Code Reuse

class A {
	public function foo() { ....}
}

class B extends A { }

Bei der objektorientierten Vererbung werden alle nicht-privaten Methoden und Attribute einer Klasse auf die Kind-Klasse vererbt. Das ist toll, denn so braucht man viele Methoden nur einmal zu implementieren, kann sie aber in vielen verschiedenen Klassen wiederverwenden. Das ist vertikaler Code Reuse. Tolle Sache, kein Thema.

Dennoch gab es ein paar Dinge, die sich mit einfacher Vererbung nicht umsetzen ließen. z.B. eine Basis-Klasse für das Singleton-Pattern. Gerade in PHP ist das Hauptproblem hier, dass keine Mehrfach-Vererbung möglich ist – also eine Klasse nicht von mehr als einer anderen Klasse abgeleitet werden kann. Das zwingt uns leider oft dazu, dass wir uns der unangehmen Entscheidung stellen müssen, ob wir nun konzeptionell sauberen Code oder aber möglichst gute Wiederverwendung von Code haben wollen. Um dennoch irgenwie horizontalen Code Reuse zu realisieren mussten Methoden kopiert werden (also praktisch kein Reuse) oder Methoden bis in die Wurzel der Klassen-Hierarchie geschoben werden, was alles andere als schön ist.

(weiterlesen …)

read more
25
Feb
2011
1304520833_preferences-system

In einem meiner letzten Beiträge habe ich mich darüber ausgelassen, dass es keine brauchbaren OpenSource Project Management Systeme gibt und beschrieben, dass ich mich bis dahin erstmal mit Trac zufrieden gebe auch wenn es mich nicht wirklich glücklich gemacht hat.

Und heute habe ich dann The Bug Genie entdeckt und war sofort beeindruckt: Das Bug Tracking und Project Management System bietet eine ganze Menge an wirklich sorgfälltig implementierten Features (dazu weiter unten mehr) und das ganz ohne das System unnötig kompliziert zu gestalten. Das Open Source Projekt ist in PHP 5.3 entwickelt und nutzt alle modernen Möglichkeiten um eine wirklich sehr angenehme GUI-Erfahrung zu bieten. (weiterlesen …)

read more
4
Feb
2011
php

Gestern war ich auf der Suche nach einem neuen geeigneten Framework für ein Projekt (bisher Codeigniter verwendet, aber das hat nie so ganz meinen Bedürfnissen entsprochen). Nach dem ich nochmal auf die Websites von codeigniter 2.0, cakePHP, akelos etc. gesurft bin und jeweils einen Blick reingeworfen habe, habe ich beschlossen mich mal von meinem Vorurteilen zu befreien und mir das Zend Framework anzusehen.

Vor diesem Framework habe ich mich lange Zeit zurückschrecken lassen, da ich der Ansicht war, dass das nur ein Haufen sinnlos zusammengestückelter PHP Files ist und das praktische Arbeiten mit dem ZF nicht besser aussieht.

Aber man muss auch mal über seinen Horizont hinausblicken, weswegen ich mir mal die Dokumentation des Frameworks angesehen habe. Erst auf deutsch. Dann auf englisch, weil die Übersetzung so schlecht ist, dass ich viele Sätze fünfmal lesen musste, bis ich sie verstanden habe :(
Den Quickstart Guide fand ich bis zu einem gewissen Punkt sehr gut, dann wurd es aber sehr schwammig und viele wichtige Punkte haben gefehlt, weswegen ich den Guide an dieser Stelle verlassen habe und beschlossen habe die Dokumentation zu lesen. Auf englisch natürlich. Die Doku ist soweit also nicht ideal aber auch nicht ausgesprochen schlecht.

Das Framework an sich ist deutlisch komfortabler als ich dachte, das autoloading erspart viel Arbeit und die saubere objektorientierte Implementierung der Komponenten ist wirklich gut.

Bisher sieht es also ganz danach aus, als würde ich das anstehende Projekt mit dem Zend Framework umsetzen. Das hat verschiedene Konsequenzen. Zu erstmal bin ich froh, diesen Schritt getan zu haben und mich endlich mit dem Framework zu befassen. Zum Anderen wird mir das wohl auch einiges an Stoff liefern, über den ich hier im Blog schreiben kann und zum anderen kann ich endlich mal wieder ein Projekt starten und habe was zum coden. Wurde auch mal wieder Zeit.

read more
25
Nov
2010
php

Angeregt durch den Artikel Die "Vor- und Nachteile von PHP" auf entwickler.de, möchte ich eine bestimmte Aussage hier nochmal aufgreifen und am Ende meine leicht provokante Meinung dazu abgeben.

Dennis Becker gab folgendes Kommentar zu dem besagten Artikel auf entwickler.de ab:

 

 

 

PHP hat einen großen Nachteil: der Zwang, abwärtskompatibel zu bleiben. In Ruby & Python sehen ich gleich gute Alternativen, besser würde ich aber nicht sagen. PHPs Problem liegt einfach in der Vergangenheit und für die urspürngliche Kernaufgabe, für die es entwickelt wurde: Form Handling und Database Communication. Ruby & Python wurden von Anfang an mit einem viel größeren Scope entwickelt!

(weiterlesen …)

read more