Tag: php
Silex: Micro-Framework für PHP-Anwendungen
Für die Entwicklung von PHP-Anwendungen muss das Rad nicht immer neu erfunden werden: Der Einsatz von Frameworks wie CakePHP oder Symfony lohnt sich in bestimmten Fällen und wenn es noch etwas weniger sein soll, könnte auch ein Micro-Framework wie Silex behilflich sein: Die kompakte Bibliothek basiert auf den Symfony2-Komponenten, die ebenfalls als Standalone-Klassen verfügbar sind. Die Entwickler Fabien Potencier und Igor Wiedler haben ganze Arbeit geleistet, denn mit dem Mini-Framework lassen sich sehr komfortabel Anwendungen entwickeln, die einfach mit modernen Funktionen ausgestattet werden können. Dazu zählt beispielsweise eine Routing-Funktionalität, mit der sich GET-Anfragen direkt auf eine Funktion übertragen lassen, die anschließend eine Ausgabe liefert.

Benötigt wird für das Framework ledglich die Datei "silex.phar", die im PHP-Archiv-Format vorliegt und zu Beginn eingebunden werden muss. Eine Beispiel-Anwendung mit Silex sieht dann in etwa so aus:
- require_once __DIR__ . '/silex.phar';
- $app = new Silex\Application();
- $app->get('/hello/{name}', function($name) {
- return "Hello $name";
- });
- $app->run();
Hier wird eine Route auf "/hello/name" abgefragt und entsprechend wird eine Meldung im Browser ausgegeben. In Silex können also Controller für die allgemeinen HTTP-Methoden GET, POST, PUT oder DELETE erzeugt werden. Weiterhin steht ein flexibles Extension-System zur Verfügung, mit dem zusätzliche Funktionalitäten integriert werden können.
Insgesamt sieht Silex sehr interessant aus und stellt für bestimmte Projekte eine solide Basis dar.
JSON: Grundlagen in JavaScript und PHP
Wer sich mit Web Services, REST und SOAP auseinandersetzt, wird womöglich auch vor der Frage stehen, ob sich für das aktuelle Projekt XML oder JSON besser eignet. Beide Formate sind weit verbreitet und ziehen unterschiedliche Eigenschaften mit sich.
Die JavaScript Object Notation, kurz JSON, kommt im Vergleich zu XML mit weniger Overhead aus, da das Datenformat einer einfacheren Notation unterliegt. Zudem können JSON-Datensätze per "eval()" von JavaScript ausgeführt werden. JSON-Datensätze können zudem per "eval()" ausgeführt werden, wobei diese Möglichkeit nur in bestimmten Fällen ausgenutzt werden sollte. Somit stellt JSON gerade im Ajax-Bereich eine solide Lösung dar. Ein Nachteil wäre hingegen die fehlende Typisierung, doch das betrifft JavaScript im Allgemeinen.

Da das Parsen von XML-Daten via JavaScript zum einen langsam und zum anderen von Browsern unterschiedlich ausgeführt wird, empfiehlt sich der Einsatz von JSON. Ein schöner Artikel über die Grundlagen von JSON wurde kürzlich bei Elated veröffentlicht. Darin wird das nötige Grundlagenwissen vermittelt und zudem finden sich darin Beispiele, wie JSON in JavaScript und PHP verwendet werden kann.
Wer XML-Daten in JSON konvertieren möchte, kann in JavaScript auch die Methode von David Walsh ausprobieren.
debugConsole: Schönere Fehlermeldungen in PHP
Im Bereich der PHP-Entwicklung sind Hinweise, Warnungen und Fehlermeldungen wichtig für eine gezielte Fehlersuche sowie eine stabile Anwendung. In PHP stehen verschiedene Fehlerebenen zur Verfügung, die Aufschluss über entsprechende Konflikte geben. Allerdings gestaltet sich die Fehlersuche auf Basis von einfachen Meldungen nicht immer einfach, da in komplexeren Anwendungen viele Faktoren in die Fehlersuche einfließen.
Abhilfe schafft eine kleine Bibliothek von Andreas Demmer: Mit der "debugConsole" werden Fehlermeldungen farbig und in einem kleinen Popup-Fenster anstatt in der eigentlichen Anwendung dargestellt. Weiterhin bietet die Bibliothek erweiterte Möglichkeiten wie Checkpoints, eine Watchlist für Variablen, Logging sowie einen Variablen-Inspektor. Echtzeit-Meldungen werden über JavaScript ausgegeben.

Die Einbindung von debugConsole erfolgt in etwa so:
- <?php
- require_once "debugConsole.php";
- dc_here("Fehlerdiagnose gestartet");
- echo $notSet; // führt zur Fehlermeldung
- ?>
Mit einem Timer kann beispielsweise festgestellt werden, wann sich welche Variable ändert. Durch das Setzen von Checkpoints lässt sich herausfinden, wo sich der PHP-Interpreter gerade im Code befindet.
Weitere Infos über die Verwendung der Bibliothek finden sich unter Anderem in der Dokumentation.
UPDATE
Das Projekt wurde inzwischen eingestellt und steht leider nicht mehr zur Verfügung.
Webentwicklung: PHP-Endung bei URLs entfernen
Mit .htaccess-Befehlen lassen sich wichtige Aspekte der Suchmaschinenoptimierung umsetzen. Neben 404-Fehlerseiten oder dem Entfernen der "www"-Subdomain zählen vor allem saubere URLs zu den Vorzügen von .htaccess-Dateien. Wer eine einfache Website mit PHP realisiert hat und verschiedene Dateien in Form von "http://www.domain.com/name-der-seite.php" vorliegen hat, kann bei Bedarf die Erweiterung ".php" mit ein paar Zeilen .htaccess-Code ausblenden. Bei stuntSnippets findet sich dazu ein kleiner Artikel, in dem die Thematik behandelt wird.

Neben diesem Beitrag finden sich bei stuntSnippets noch weitere interessante Code-Bausteine, so dass die kleinen Lösungen der Seite in vielen Fällen behilflich sein dürften.
Unabhängig davon folgt hier noch ein kleines .htaccess-Snippet, durch das saubere URLs mit PHP und einer Struktur im Stil von "index.php?id=seite" erreicht werden können:
- RewriteEngine On
- RewriteCond %{REQUEST_FILENAME} -f [OR]
- RewriteCond %{REQUEST_FILENAME} -d
- RewriteRule ^(.+) – [PT,L]
- RewriteRule ^(.*) index.php?id=$1
- RewriteRule ^(.*)/(.*) $2
Weitere nützliche .htaccess-Snippets finden sich unter Anderem hier.
Webentwicklung: Sammlung etlicher PHP-Snippets
Gute Snippet-Sammlungen finden sich mittlerweile häufig im Netz. Wer noch ein paar interessante PHP-Snippets sucht, sollte bei PHPSnippets.info vorbeischauen. Hier werden in kurzen Zeitabständen nützliche Code-Schnipsel aus unterschiedlichen Bereichen veröffentlicht. Dabei handelt es sich um knappe, aber hilfreiche Funktionen, die zudem in Kategorien eingeteilt sind.

In den Snippets finden sich so beispielsweise Funktionen zur Währungsumrechnung oder automatischen Backup-Erstellung einer MySQL-Datenbank. Weiterhin gibt es ein Snippet, mit dem sich der Ursprung einer "TinyURL"-Adresse anzeigen lässt.
Die Seite dürfte einen Platz in den Lesezeichen finden, da auch in der kommenden Zeit sicherlich weitere Snippets folgen werden.
UPDATE
Die Seite wurde inzwischen geschlossen und steht leider nicht mehr zur Verfügung.
Webentwicklung: GET- und POST-Daten ab PHP 5.2
Das Filtern von GET- oder POST-Daten, die über PHP eingelesen werden (per "$_GET" oder "$_POST"), stellt einen wichtigen Aspekt für die Absicherung von PHP-Anwendungen dar. Eingehende Daten, die von Benutzern stammen (etwa bei Formularen), müssen durch verschiedene Funktionen gefiltert werden (Escaping), um möglichen Angriffen vorzubeugen. Wer auf PHP 5.2 zurückgreifen kann, sollte sich zu diesem Thema den Artikel bei php|architect ansehen. Darin wird beschrieben, wie sich das eingebaute Filter-System von PHP nutzen lässt, um GET- und POST-Daten sicher zu filtern.

Die Funktionen werden mit "filter_input()" oder "filter_input_array()" aufgerufen und können genutzt werden wie folgt:
- <?php
- $string = filter_input(INPUT_GET, "string", FILTER_SANITIZE_STRING);
- ?>
Mit dem Parameter "FILTER_SANITIZE_STRING" werden die Daten also von ungewünschten Zeichen befreit, die üblicherweise mit "stripslashes()", "strip_tags()", "htmlentities()" oder "htmlspecialchars()" gefiltert werden müssen. Neben der Option "INPUT_GET" sind zudem die Angaben "INPUT_POST", "INPUT_SERVER", "INPUT_COOKIE" oder "INPUT_ENV" möglich.
LESSPHP: Leaner CSS auch mit PHP kompilieren
Viele Webentwickler werden das LESS-Projekt (Leaner CSS) kennen, mit dem sich CSS-Code durch eine vereinfachte Sprache generieren lässt. Dadurch wird weniger Code benötigt und zudem können Variablen bzw. Konstanten genutzt werden. Der Pionier Shaun Inman hat ein derartiges Projekt schon vor einigen Jahren veröffentlicht und stellt es auf dieser Seite stets zum Download bereit.
Die LESS-Bibliothek ist als Ruby Gem erhältlich und benötigt daher für die Kompilierung Ruby auf dem Webserver. Wer nicht auf die Programmiersprache zurückgreifen kann und dennoch LESS nutzen möchte, kann sich LESSPHP ansehen. Dabei handelt es sich um einen PHP-Compiler für die abgespeckten CSS-Deklarationen.

Ein Beispiel für LESS-Code:
- @base: 24px;
- #header {
- font-size: @base / 2;
- }
Mit dem Compiler können nun dynamische CSS-Dateien beim Aufruf der entsprechenden Seite mit folgendem Code generiert werden:
- require "lessc.inc.php";
- try {
- lessc::ccompile("input.less", "output.css");
- } catch (exception $ex) {
- exit("lessc fatal error:<br />".$ex->getMessage());
- }
Weitere Informationen finden sich auf der Website des Projekts. Kürzlich wurde zudem auch eine JavaScript-Variante des Projekts veröffentlicht.
PHP CSS Browser Selector: Moderne Browsererkennung
Es gibt viele Möglichkeiten, eine Website für mehrere Webbrowser anzupassen: Die bekannteste Methode dürften "Conditional Comments" sein, mit denen sich per HTML-Kommentar verschiedene Versionen des Internet Explorers ansprechen lassen. Allerdings beschränkt sich diese Anpassungsmöglichkeit auf den Microsoft-Browser, so dass für weitere Optionen eine Skriptsprache benötigt wird. In JavaScript gibt es bereits etliche Skripte, mit denen sich Einstellungen für bestimmte Browser vornehmen lassen. Eine elegantere Lösung stellt jedoch ein PHP-Skript wie der "PHP CSS Browser Selector" von Bastian Allgeier dar. Mit der kleinen Bibliothek können sogar mobile Geräte angesprochen werden.

Die Implementierung des Skripts ist denkbar einfach:
- PHP-Code:
- <?php require("css_browser_selector.php"); ?>
- …
- <html class="<?php echo css_browser_selector() ?>">
- Ausgabe:
- <html class="gecko ff3 win">
Dem html-Element werden also entsprechende CSS-Klassen zugeteilt, die schließlich per CSS eingestellt werden können. Durch diese Methode werden Browser-Hacks und separate CSS-Dateien überflüssig. Einziges Manko dürfte der Punkt sein, dass Version 6 des Internet Explorers keine multiplen Klassenzuweisungen versteht. Dennoch kann das Skript für besondere Anpassungen sehr nützlich sein.