Tag-Archive for » PHP «

Zufällige Werbe-Banner mit PHP

Werbebanner sind immer noch sehr gefragt, und auch wenn Sie mehrere Banner abwechselnd an einer Stelle anzeigen möchten, ist das mit PHP kein großes Problem. Das soll an einem Beispiel mit zwei zufällig wechselnden Bannern für verschiedene Kunden, Bannergrafiken, Titel- und Alt-Tags gezeigt werden.

Zunächst sollten die Daten der Werbebanner sinnvollerweise in ein Array gepackt werden. Das könnte so aussehen:

<?
$werbung = array( 1 => array(‘ziel‘ =>’adresse1.de‘, ‘grafik‘ => ‘banner1.gif‘, ‘titel‘ => ‘Werbung1‘, ‘alt‘ => ’1. Banner‘), 2 => array( ‘ziel‘ => ‘adresse2.de‘,  ‘grafik‘ => ‘banner2.gif‘, ‘titel‘ => ‘Werbung2‘, ‘alt‘ => ’2. Banner‘));
?>

Die Ausgabe des mit der Funktion array_rand() zufällig ausgewählten Werbebanners mit Bild, Link, Titeltext und Alt-Text kann mit folgender Routine erzeugt werden:

<?
$sb = array_rand($werbung);
echo ‘
<div>
<a href = http://’.$werbung[$sb][‘url’].’/ title = “’.$werbung[$sb][‘titel’].’”>
<img src = “.$werbung[$sb][‘grafik’].’” Alt = “’.$werbung[$sb]['alt‘].‘“ />
</a>
</div>‘;
?>

Dabei müssen die Grafiken im selben Verzeichnis liegen, in dem auch die Programmdatei ist.

Category: Allgemein  Tags: , ,  Leave a Comment

PHP Data Objects

Seit der Version PHP 5.1 gibt es in PHP zusätzlich zu den Standardfunktionen von MySQL auch die PHP Data Objects (PDO). Das ist eine PHP-Erweiterung, mit der man sehr schnell in einheitlicher Weise auf verschiedene Datenquellen zugreifen kann.

Ähnlich wie beim bekannten und weit verbreiteten Repository PEAR werden dabei die spezifischen Zugriffe auf die verwendete Datenbank durch PDO gekapselt und sind damit transparent. PDO ist aber im Gegensatz zu PEAR eine rein binäre Erweiterung und deshalb auch deutlich schneller. PDO unterstützt zurzeit die Datenbanken MySQL, SQLite, PostgreSQL, MS SQL Server, Oracle, DB2, Firebird und auch ODBC. Dabei braucht allerdings jeder Datenbanktyp seinen spezifischen Treiber, sonst funktioniert es nicht.

Eine Datenbankverbindung kann man über PDO mit folgendem Code öffnen, die Daten auslesen und listen und dann wieder schließen:

$db = new

PDO(‘mysql:host=localhost;dbname=meinedatenbank‘, ‘user‘, ‘passwort‘);

$sql = $db->prepare(“SELECT * FROM meinetabelle“);

$sql->execute();

while ($row = $sql->fetch()) {

echo $row[id].” “.$row[name].“ <br /> “;

}

$sql 0 NULL;

$db = NULL;

Das kurze Beispiel-Script öffnet eine Verbindung zur MySQL-Datenbank meinedatenbank, liest alle Daten aus der Tabelle meinetabelle aus und listet dann die Datenfelder id und name aus jedem Datensatz auf. Danach wird die Datenbankverbindung sauber geschlossen.

Die Erweiterung PDO gestattet auch die Arbeit mit Prepared Statements, also vorkompilierten SQL-Kommandos. Dabei werden Platzhalter statt der dynamischen Daten verwendet, denen in einem zweiten Schritt die echten Werte zugewiesen werden. Das ergibt bei mehrmaliger Ausführung dieser Kommandos einen sehr deutlichen Gewinn an Performance. Aber auch bei einmaligen Aufrufen sind Prepared Statements den Methoden exec() und query() von der Geschwindigkeit her überlegen.

Die PDO-Technik bietet auch mehr Sicherheit, weil man damit SQL Injection relativ leicht verhindern kann. Darüber hinaus unterstützt PDO neben den benannten auch anonyme Parameter. In diesem Fall erzwingt die Reihenfolge der Parameter die Reihenfolge der Parameterwerte.

Welche Datenbank-Schnittstellen auf Ihrem System unterstützt werden, können Sie in der PHP-Konfigurationsdatei nachlesen oder sich mit dem Kommando phpinfo() ausgeben lassen.

Category: Allgemein  Tags: , ,  Leave a Comment

Einfacher Schutz vor Cross Site Scripting

Das Cross Site Scripting (XSS) gehört zu den häufigsten Angriffsmethoden auf Internetseiten. Dabei bezieht sich das Cross Site nicht unbedingt darauf, dass zwei Seiten beteiligt sind, sondern darauf, dass der Angriff zwischen mehreren Aufrufen einer Seite passiert. Grundsätzlich ist Cross Site Scripting eine spezielle Form von HTML-Injection, und es passiert meist in Formularen, in denen Benutzerdaten eingegeben und ungeprüft weiterverarbeitet werden. Da kann dann ein Angreifer leicht ausführbaren Programmcode ins System schmuggeln.

Sie haben das vielleicht schon einmal im Gästebuch, Blog, Wiki oder Forum erlebt. Ein Angreifer gibt zum Beispiel dort einen Schadcode ein, der dann auf dem Client eines Benutzers, der sich das Gästebuch anschaut, ausgeführt wird. Der Schadcode ist meist in Javascript geschrieben.

Deshalb sollte man beim Erstellen einer solchen Seite alles tun, um das injizieren von ausführbarem Code zu verhindern. Dazu bieten sich mehrere einfache Möglichkeiten an, die die Sicherheit merkbar erhöhen.

Zunächst sollte man alle Eingaben von Benutzern als unsicher und bösartig betrachten und deshalb auf jeden Fall vor die weitere Verarbeitung eine Prüfung der Eingabewerte schalten. Als erstes sollte die Länge geprüft werden. Eine deutsche Postleitzahl mit mehr als 5 Stellen ist je nach Inhalt entweder ein Eingabefehler und sollte dem Benutzer zurück gemeldet werden oder aber ein versuchter XSS-Angriff. Prüfen kann man die Länge mit einem Befehl wie:

If (strlen($plz) > 5) die „Postleitzahl ist ungültig!“ ;

In ähnlicher Weise kann man auch auf den Datentyp prüfen. Diese Überprüfungen bringen aber selten einen XSS-Angriff ans Licht, sondern eher allgemeine Manipulationsversuche an den Parametern oder einfach nur Eingabefehler. Auch das verbessert die Qualität des Formulars. Um aber zum Beispiel die Tags eines Angreifer-Scripts zu entfernen, können Sie die Funktion strip_tags() von PHP benutzen. Der Befehl:

$nachrichtok=strip_tags($nachricht);

entfernt alle HTML-Tags aus dem Eingabefeld $nachricht und stellt eine bereinigte Version in die Variable $nachrichtok. Selbst wenn hier Javascript-Code eingefügt wurde, kann er so keinen Schaden mehr anrichten.

Schon diese einfachen Maßnahmen lassen den größten Teil der Angriffe auf formularbasierte Funktionen von Internetseiten scheitern. Wenn man hier allerdings absolute Sicherheit haben möchte, oder wenn man HTML-Formatierungen zulassen und trotzdem sicher für XSS sein möchte, hilft nur ein noch tieferes Eindringen in die Materie. Eine Suche in Google mit den entsprechenden Suchbegriffen führt hier weiter.

Schnelleres PHP mit HipHop

PHP ist eigentlich eine interpretierte Sprache. Das heißt, dass eine PHP-Seite erst übersetzt und dann ausgeliefert wird. Das braucht natürlich unnötig Zeit, wenn eine Seite bei jedem Aufruf erneut übersetzt wird, auch wenn der Quellcode überhaupt nicht geändert wurde. Auch die Entwickler von PHP haben das schon lange erkannt, und seit der Version 4 wird der Quellcode vor der Ausführung zunächst in einen Bytecode übersetzt und dann solange gespeichert vorrätig gehalten, bis sich der Quellcode einmal geändert hat. Erst dann wird er wieder einmalig in den Bytecode übersetzt. Dadurch kann die Ausführung eines PHP-Programms bis zu achtmal schneller erfolgen.

Für normale Internetseiten ist das schon eine deutliche Verbesserung der Performance – die Besucher einer solchen Präsenz bekommen schnell die angeforderten Informationen. Dem Internetdienst Facebook, der ca. 30.000 Server betreibt, um die Last von einigen Hundert Milliarden Seitenabrufen zu bewältigen, war das nicht ausreichend, und HipHop wurde innerhalb von zwei Jahren entwickelt.

Im Grunde übersetzt HipHop den PHP-Quellcode in C++-Quellcode und diesen wiederum in Maschinensprache. So etwas nennt man einen zweistufigen Sourcecode-Transformator.

Leider hat das System auch seine Schwächen, die zurzeit in der PHP-Community diskutiert werden. Das beginnt bei Funktionen wie eval(), die mit HipHop nicht mehr laufen, mit der Verkomplizierung der Entwicklungsprozesse, der berechtigten Sorge, dass die Anwendung sich unter HipHop nicht mehr genauso verhält wie das PHP-Original und endet mit Befürchtungen um die Kompatibilität mit aktuelleren oder zukünftigen PHP-Versionen.

HipHop ist bedingt durch seine Nachteile sicher keine Universallösung zur Beschleunigung von PHP-Programmen und zum Einsparen von Ressourcen. In Einzelfällen kann es aber sehr gut helfen, bezüglich der Performance oder des Ressourcenverbrauchs einer dedizierten PHP-Lösung auf die Beine zu helfen.

Probieren Sie es doch einfach aus, wenn Sie ein vielversprechendes Projekt im Auge haben! Sie können HipHop für PHP bei github.com kostenlos downloaden. Dort finden Sie auch Dokumentation zurInstallation und eine Beschreibung des Build-Prozesses. Auch im Wiki finden sich weitere Informationen zur Arbeit mit HipHop.

Die platzsparende Speicherung von IP-Adressen mit MySQL und PHP

Es ist eine ziemlich unbekannte Funktion von MySQL, die es erlaubt, IP-Adressen nicht wie üblich als VARCHAR(15), sondern als UNSIGNED INT(10) in der Datenbanktabelle abzuspeichern und natürlich auch wieder zurück in eine IP-Adresse zu verwandeln. Da VARCHAR(15) 16 Bytes verbraucht und der 4-Byte-Long nur 4 Bytes, braucht man damit nur ein Viertel des Speicherplatzes.

Die dazu nötigen MySQL-Funktionen sind INET_ATON() und INET_NTOA(). Wenn Sie den Befehl

SELECT INET_ATON(„127.0.0.1“), INET_NTOA(2130706433)

an MySQL schicken, werden sie als Resultate 2130706433 und 127.0.0.1 zurückbekommen. In dieser rein numerischen Notation lassen sich zum Beispiel bestimmte Ranges von IP-Adressen wesentlich einfacher überprüfen als mit den IP-Adressen:

SELECT `feld` FROM `tabelle` WHERE `ip`&lt; = INET_ATON(’192.168.254.1′) AND `ip`&gt; = INET_ATON(’192.168.254.254′);

Dieser Befehl zeigt alle gespeicherten IP-Adressen zwischen 192.168.254.1 und 192.168.254.254.

Es gibt auch zwei entsprechende PHP-Funktionen, die genauso funktionieren. Mit ip2long() und long2ip() übernimmt PHP die entsprechende Umwandlung, so dass auch ohne MySQL das wesentlich einfachere Scannen von IP-Ranges möglich ist.

Category: Allgemein  Tags: , ,  One Comment

Kompletter Shop als Open Source

Mit der Open Source Anwendung Free PHP Shopping Cart Software wird PHP-Entwicklern ein komplettes Shopsystem kostenlos zur Verfügung gestellt. Der Shop läuft mit PHP 4.0 und höher und braucht als Datenbank MySQL 4.0 oder höher. Das Installationsscript ist kurz und knackig, wenn man allerdings keine Schreibrechte für das Installationsverzeichnis vergibt, wird man von Warnungen nur so erschlagen. Deshalb ist es für einen schnellen Test sinnvoll, vor der Installation Schreibrechte für jedermann zu vergeben. Wenn Ihnen die Software gefällt und der Shop soll echt in Betrieb gehen, sollten Sie nur noch die absolut notwendigen Schreibrechte vergeben haben.

Admin-Interface

Admin-Interface

Dateien und Unterverzeichnisse werden bei der Installation automatisch erzeugt und es gibt auch eine automatische Update-Funktion. Wenn Ihr Webspace vorbereitet und eine leere Datenbank angelegt ist, dauert der Installationsprozess nur wenige Minuten.

Es gibt eine Verwaltung für Kunden, Lieferanten, Hersteller und Produkte und ein Warenkorbsystem. Produkte und Kategorien sind nicht begrenzt, Sie können auch beliebig viele Produktbilder einstellen. Eine Bestandskontrolle ist integriert und einzelne Produkte können auch ausgeblendet werden. Produktoptionen wie Größen oder Farben werden unterstützt. Als Bezahlschnittstelle ist Paypal integriert und auch Google Analytics wird unterstützt. Der Shop kann mit suchmaschinenfreundlichen URLs arbeiten.

Für Kunden gibt es ein Login und eine „Forgot Password“-Funktion. Bestellbestätigungen und Hinweise gehen über ein Email-Interface. Auch ein Supportsystem ist auf dieser Basis eingebaut. Die Kundendaten werden für Folgebestellungen gespeichert.

Ein einfaches Template-System erlaubt die Anpassung des Shops an Ihre Vorstellungen. Es können neue Designs erstellt und auch später noch geändert werden. Deshalb lässt sich der Shop auch leicht in vorhandene Seiten integrieren.

Alle notwendigen Funktionen finden sich im Admin-Interface. Englischkenntnisse sind für die Einrichtung und Pflege des Shops hilfreich. Das Programm können Sie auf freephpshoppingcartsoftware.com downloaden. Hier finden Sie auch weiterführende Informationen.

Category: Allgemein  Tags: ,  Leave a Comment

Drupal – ein CMS für Community-Websites

Drupal ist zwar ein weit verbreitetes CMS, hat seine Stärken aber nicht unbedingt im Content-Management. Das System ist eher für das Erstellen und Pflegen auch größerer Communities ausgelegt und diesen Bereich deckt es sehr gut ab. Drupal bietet dazu ein ausgefeiltes Benutzer-Management und viele Module wie Blogs und Foren als interaktive Bestandteile.

Die Architektur von Drupal ist für Content Management Systeme typisch. Man kann das Kernsystem mit zusätzlichen Modulen erweitern, um die gewünschten oder benötigten Zusatzfunktionen zu realisieren. DieSchnittstelle ( API) zur Integration von solchen Modulen ist bei Drupal gut dokumentiert und im Internet wird eine Unzahl von Erweiterungen für das CMS angeboten.

Das Aussehen der erstellten Seiten, also Design und Layout, wird von einem Template-System gesteuert. Auch diese Templates (auch Skins oder Designs genannt) zu Drupal findet man in großer Zahl im Internet.

Zum Ablaufen braucht Drupal auf dem Server PHP in der Version 4.3.5 oder höher und als Datenbank MySQL oder PostgreSQL.

Wenn die Apache-Komponente mod_rewrite zur Verfügung steht, unterstützt Drupal auch die Verwendung von suchmaschinenfreundliche URLs. Für einige Funktionen des CMS werden noch weitere Komponenten nötig, zum Beispiel das meist sowieso eingebundene XML-Modul von PHP für das Blogger-API oder die RSS-Syndication.

Vor dem Installieren muss auf dem Server eine Datenbank für Drupal mit phpMyAdmin erstellt und die Datei settings.php in sites/default erzeugt werden. Danach kann man die URL aufrufen und wird vom Installationsscript durch den Installationsvorgang geführt.

Category: Allgemein  Tags: , , , ,  Leave a Comment

Bluefish Version 2.0 – ein guter Programm-Editor für Anfänger

Bluefish ist ein flexibler Editor für Entwickler, der unter Anderem PHP, CSS, Javascript, XML, C, C++, CFML, gettext PO, HTML, Perl, Python, Ruby, Unix Shell, SQL und Java unterstützt. Man kann sehr produktiv mit Bluefish 2.0  arbeiten und spart sich gegenüber einem Standard-Texteditor viel Zeit.

Der Editor verfügt über immer mehr Lokalisierungen (zur Zeit zehn) und ist auch auf die deutsche Sprache umschaltbar. Auch die Installationsroutine des Programms spricht Deutsch. Früher war Bluefish nur für Linux und Mac zu bekommen, seit der Version 1.3.7 gibt es auch eine native Version für Windows.

Bluefish 2.0

Bluefish 2.0

Bluefish ist leicht und schnell. Im Vergleich mit anderen Programmeditoren braucht der Editor nur ein Drittel der Speicherressourcen. Er startet auch auf schwächeren Computern wie Netbooks echt schnell und lädt hunderte von Dateien in Sekunden. Dabei kann das Multi-Datei-Interface über 500 Dateien gleichzeitig geöffnet halten.

Man kann mehrere Projekte mit Bluefish verwalten und selbstverständlich auch mit Dateien auf Netzwerkrechnern arbeiten. Eine unbegrenzte Undo/Redo-Funktion ist genauso selbstverständlich wie ein Auto-Recovery nach einem Crash oder ähnlichen Problemen.

Intern arbeitet der Editor mit UTF8, unterstützt aber die meisten anderen Codierungen. Man kann Bluefish 2.0 kostenlos herunterladen, der Editor steht unter der Gnu Public License (GPL).

Neuer Update für Zend Studio

Die integrierte Entwicklungsumgebung (IDE) Zend Studio in der neuen Version 7.1 bietet dem Programmierer einen vollständigen, professionellen Arbeitsbereich auf der Basis der Eclipse PHP-Entwicklungswerkzeuge (PHP Development Tools = PDT). Keines der anderen Eclipse-Projekte wird zur Zeit häufiger herunter geladen als die PDT.

Zend Studio 7.1.2

Zend Studio 7.1.2

Als Benutzer von Zend Studio können Sie von den vielen verfügbaren Plugin-Lösungen der Eclipse-Community enorm profitieren. Das integrierte Eclipse-Mylyn-Projekt erleichtert den Wechsel zwischen verschiedenen Aufgaben merklich und lässt  Sie merklich produktiver arbeiten.

Der vereinfachte Workflow unterstützt die einfache Synchronisation der Dateien eines Projektes auf einem Remote-Server. Das kann ein Server im Internet, aber auch ein Entwicklungsserver in Ihrem Intranet sein, was zur weiteren Erhöhung der Produktivität führt. Dadurch können Sie Ihren Code in der Umgebung schreiben, testen und optimieren, in der er auch letztlich laufen soll, was viele Cross-Platform-Probleme erst gar nicht aufkommen lässt.

Zend Studio stellt eine vollständige PHP-Entwicklungsumgebung für die aktuelle PHP-Version 5.3 dar. Durch die neuen Funktionen wird die Verwaltung erleichtert, Code-Assist sorgt für präziseren Code und das neue Syntax-Highlighting ermöglicht zusammen mit den neu eingeführten Namespaces und Closures eine bessere Organisation des Codes.

Category: Allgemein  Tags: ,  Leave a Comment

CSS mit PHP zur Laufzeit ändern

Auch mit PHP kann man zur Laufzeit CSS-Anweisungen oder Attribute verändern und dem Kontext des Programmes oder dem Status eines Benutzers anpassen. Dabei ist PHP von der Geschwindigkeit her Javascript unterlegen und empfiehlt sich, wenn global unterschiedliche CSS-Dateien ausgewählt werden sollen. Das ist zum Beispiel bei Browserweichen interessant, die passend zum vom Client verwendeten Browser die entsprechende CSS-Datei laden.

Dabei ist PHP Javascript von den Möglichkeiten der CSS-Verarbeitung und –Manipulation her voraus. PHP ist die erste Wahl, wenn die CSS-Anweisungen und –Attribute aus einer Datenbank geladen werden sollen.

Es ist auch möglich, dem Surfer die Auswahl des Styles für eine Webseite zu überlassen. Dazu wollen wir ein kleines Programmbeispiel besprechen: Die Seite kommt normalerweise in einem blauen Design, soll aber vom Besucher auf Rot oder Grün umgestellt werden können.

Dazu werden zwei PHP-Elemente gebraucht, nämlich ein Link, der die Umschaltung als Parameter eines erneuten Seitenaufrufes steuert und ein Auswertungsteil im Header der aufgerufenen Seite. Die Link sehen wie folgt aus:

<a href=”<? basename($PHP_SELF).“?design=rot”; ?> Seite in Rot </a>
<a href=”<? basename($PHP_SELF).“?design=gruen”; ?> Seite in Gr&uuml;n </a>
<a href=”<? basename($PHP_SELF).“?design=blau”; ?> Seite in Blau </a>

Mit basename($PHP_SELF) wird der Name des aktuellen PHP-Programms ausgegeben und dann um den Parameter „design“ für die Seitenfarbe ergänzt. Dieser Parameter muss im Kopf der PHP-Datei  abgefragt und die passende CSS-Datei dazu eingebunden werden, damit das Ganze auch funktioniert. Dafür ist der folgende Code-Schnipsel zuständig:

<?
switch ($design) {
case
“rot”:
echo ”
<link rel =\stylesheet\ type=\”text/css\” href=\”rot.css\”> ”;
break;
case
“gruen”:
echo ”
<link rel =\stylesheet\ type=\”text/css\” href=\”gruen.css\”> ”;
break;
default:
echo ”
<link rel =\stylesheet\ type=\”text/css\” href=\”blau.css\”> ”;
break;

}

Die Fallverzweigung liest den Wert des Parameters “design”, mit dem die Datei aufgerufen wurde und lädt abhängig davon eine der drei CSS-Dateien rot.css, gruen.css oder blau.css. Dabei ist blau.css als Standardwert eingetragen und würde ausgewählt, wenn bei einem Aufruf des Programms kein Designparameter mitgegeben würde.

Falls bei Ihrem Server der Initialisierungswert „register_globals“ ausgeschaltet ist, funktioniert die Übergabe des Design-Parameters so nicht. In dem Fall hilft die Zeile

$design = $_GET[design];

vor dem eigentlichen Switch-Befehl. Dadurch wird der Parameter explizit in die PHP-Variable $design kopiert und steht dem Programm zur Auswertung zur Verfügung.

Category: Allgemein  Tags: ,  Leave a Comment