Bananas Development Blog: share your thoughts

E-Mail validation ist eigentlich unnötig

Sobal man von dem Benutzer eine E-Mail Adresse braucht, steht man vor dem "Problem" ob die Eingabe nun wirklich eine richtige E-Mail Adresse ist.

Als erstes wird man ja versuchen anhand einer Analyse der Eingabe festzustellen ob es eine korrekt formatierte E-Mail Adresse ist. Danach noch herausfinden via ping etc. ob die Domain vorhanden ist.

Leider gibt es bei der Überprüfung der Eingabe ein Problem.
Es sind viele Methoden im Umlauf die meinen sie könnten 100% testen ob die Eingabe eine E-Mail Adresse ist.

Tja, aber solche Zeichen sind in einer E-Mail Adresse auch gültig !!!
! $ & * - = ^ ` | ~ # % ' + / ? _ { }

Um Grunde sind es viel mehr Zeichen wenn sie richtig maskiert sind !

Also lassen wir diese Überprüfung am besten Falle weg und senden einfach eine Kontroll E-Mail.

Email address validation: please stop
I Knew How To Validate An Email Address Until I Read The RFC

In SilverStripe die Vergabe eines sinnvollen Seitentitels erzwingen

Da nicht jeder Redakteur eine Ahnung von SEO hat und diese auch nur Menschen sind, kann es in SilverStripe zu Problemen mit den Seitentiteln kommen.

Wenn man eine neue Seite anlegt bekommt diese automatisch einen Namen. Diesen muss man leider nicht ändern und somit können viele Seiten entstehen die den selben Seitentitel haben und auch noch eine fortlaufende URL.

Alles nicht so dolle.

Wie man diese Problematik leicht lösen kann habe ich hier beschrieben.

Ausgabe auf der Kommandozeile in Farbe mit PHP

Jeder hat sicherlich nicht nur PHP Scripte erstellt, die über den Apache ablaufen, sondern auch Scripte dir nur auf der Kommandozeile laufen und nicht für den Browser gedacht sind.

Oft lässt man sich ja das Ergebnis oder Statusmeldungen ausgeben. Man kann diese mit Hilfe vo ASCII Zeichen formatieren aber mit Farbe sieht das schon besser aus.

Farben in der Kommandozeile nutzen

PHP Funktionen begrenzen

PHP und wie andere Sprachen habe eine Fülle an funktionen.

Es werden aber nicht immer alle gebraucht. Manche sind je nach Einsatzort sogar "gefährlich".

In PHP gibt die Möglichkeit solche Funktionen zu deaktivieren.

Gefährliche PHP-Funktionen ausschalten

Weiterhin gibt es dazu noch das Suhosin Projekt. Damit kann man sich noch ein wenig mehr Sicherheit geben lassen.

Große Dateien mit PHP komprimiert als Download streamen

Die Idee und der Ansatz finde ich nicht schlecht und ist sicherlich eine Lösung große Dateien unkompliziert anzubieten.

Große Dateien komprimiert als Download streamen
Bei großen Dateien gibt es mehrere Probleme. Sie belegen viel Speicherplatz auf der Festplatte, bei der Komprimierung vergeht viel Zeit, die fertig komprimierte Datei belegt wiederum viel Speicherplatz, und eventuell wird auch viel Arbeitsspeicher benötigt beim Komprimieren oder ausliefern via PHP.


Twitter OAuth Anbindung

Wir hatten es ja schon mal davon. Nur diesmal ist es allgemeiner.

Creating a Twitter OAuth Application
OAuth can be a tricky concept to wrap your head around at first, but with the Twitter API now requiring its use, it is something you need to understand before creating a Twitter application. This tutorial will introduce you to OAuth, and walk you through the process of creating a basic application


( Mirror )

Meinungen über PHP von PHP Experten

Viele benutzen es und viele wollen es lernen.

Hier nun eine kleine Übersicht was denn so "bekanntere" Leute über PHP so denken und woe die Vorteile und Nachteile sind.


8 Experts Break Down the Pros and Cons of Coding With PHP
For the last post in this series, we’ve turned to the same experts with some more general questions: What makes PHP a good language? What are some of PHP’s drawbacks? And what are the best apps or cleverest hacks you’ve seen made with and/or for PHP?


Hier ist die Serie aus die dieser Beitrag kommt.

Mit PHP Dateien verschlüsseln

Sicher bekam man mal die Frage ob die Dateien, die man einer Anwendung hochgeladen hat, auch sicher sind. Vielleicht kam sogar einer auf die Idee diese zu Verschlüsseln.

Solchen Anfragern, sage ich dann immer, dass Daten die Vertraulich sind nichts auf einem Webserver zu suchen haben. Es ist einfach kein sicherer Ort...

Wenn aber nun mal doch so eine Anfrage kommt und man kann sie nicht abwehren, dann könnte man diese Anleitung hier als Lösungsansatz nehmen.
Encrypting uploaded files in PHP

Dabei sollte man aber beachten, dass dies nur ein "Hinderniss" für voreilige Script Kiddies ist und keine absolute Sicherheit bietet. Dazu kommt noch das Problem mit großen Dateien. Alleine der Upload solcher Dateien macht ja schon Probleme. Diese dann noch zu verschlüsseln, überfordert die Arbeitsspeichereinstellung für PHP.

Aber es sollte doch dem ein oder anderen Helfen.

ZendFramework, SQL und Segmentation Fault

ZendFramework und lange DB Statements und das Problem mit dem preg_replace.

Das Problem hatte ich ja schon mal. Leider ist das in der aktuellen (1.11.0) Version immer noch so. Betrifft alles was länger als ungefähr 3000 Zeichen ist.
Nun lässt sich das aber nicht so einfach wie damals beheben.

Nach langem Suchen und Versuchen es zu fixen, kam ich zu dieser vermeintlichen Lösung:

$db->getConnection()->query($sql);


Leider funktionierte das nicht.

Nach ein wenig hin und her viel mir auf, dass dieses Problem nur auftritt wenn es sich im einen INSERT handelt. Nicht aber wenn es ein UPDATE Befehl ist.

Da kam dann der aha Effekt. Ich baute meinen INSERT Befehl einfach um, in dem
ich nur einen INSERT machte damit ich eine neue ID bekam. Diese konnte ich dann verwenden um die restlichen Daten ab zu speichern.

$db->query(INSERT);
$db->lastInsertId();
$db->getConnection()->query(UPDATE);


Somit lies sich das "Problem" beheben...

Die Bugs die das betrifft sind (unvollständig):
- http://framework.zend.com/issues/browse/ZF-10209
- http://framework.zend.com/issues/browse/ZF-10248
- http://framework.zend.com/issues/browse/ZF-5063

PHP memory usage messen

Man lernt ja nie aus.

Die allgemeine "Lösung" des folgenden Fehlers:
PHP Fatal error: Allowed memory size of 8388608 bytes exhausted (tried to allocate … bytes) in …

ist einfach das memory limit hoch zu setzten.

Dies löst aber das Problem nicht. Es umgeht dieses nur.

Damit es zu so einem Fehler nicht erst kommt, muss man eine Möglichkeit haben den Wert des Arbeitspeicherverbrauchs zu messen. Nun bin ich über eine Lösung gestolpert mit der PHP es möglich macht diesen Wert auszulesen.

Frühzeitig Memory Limit Probleme entdecken
Vorausschauendes oder defensives Programmieren wird häufig vernachlässigt. Man geht allzu häufig davon aus, dass die Umgebung immer die selbe ist und wenn es einmal funktioniert, dann funktioniert es immer. Zum defensiven Programmieren gehört aber nicht nur, alle möglichen Fälle von Parametern abzufangen die jemand in eine Methode reinstopfen könnte, sondern auch die Prüfung der Webservereigenschaften. Denn wer weiß, ob das Projekt in einigen Monaten oder Jahren nicht auf einen anderen Webserver (z.B. IIS -> Apache) umgezogen wird, oder bei der Installation einer neuen PHP-Version vergessen wurde, die php.ini korrekt anzupassen.


Damit sollte man zumindest gewarnt werden, wenn es eng wird.
Natürlich ist das keine perfekte Lösung und eine allgemeine Überwachung des Servers wird damit nicht ersetzt, aber es können unangenehme Fehler erkannt und behoben werden.

RSS Feed manuell erstellen

Ist ja eigentlich ein alter Hut, aber wenn man es mal ohne Hilfe macht. Also alles selber, dann helfen diese 2 Seiten einem weiter:

- RSS
- Feed Validation Service

Viel Spass beim coden ;-)

Arbeiten mit SilverStripe

So.

Eine Erfahrung mehr in meinem Portfolio. SilverStripe.

Wie ich damit zu recht komme und was es besonderes zu beachten gibt, kann man nun hier finden.

Bitte beachtet, dass es meine Erfahrungen sind und es nicht immer garantiert ist, dass es auch funktioniert.

Fehler die ein Web Developer nicht mehr machen sollte

Da wir ja Menschen sind und diese bekanntlich Fehler machen, sollten wir Listen führen in denen solche Fehler stehen damit wir sie nicht mehr machen.

Hier nun eine List für den Web-Developer:

Common Security Mistakes in Web Applications
Web application developers today need to be skilled in a multitude of disciplines. It’s necessary to build an application that is user friendly, highly performant, accessible and secure, all while executing partially in an untrusted environment that you, the developer, have no control over. I speak, of course, about the User Agent. Most commonly seen in the form of a web browser, but in reality, one never really knows what’s on the other end of the HTTP connection.


ZendDebug will nicht, IPv6

Man, da muss man erster mal drauf kommen.

Je nach Konfiguration und Installation läuft der ZendDebug port nur auf IPv6 und nicht auf IPv4.
Da bei mir local nicht auf IPv6 umgestellt wurde kann das ZendStudio und die ZendToolbar nicht miteinander kommunizieren.
Die Toolbar sagt immer es wurde kein ZendStudio gefunden etc. Und das ZendStudio sagt es wurde keine ZendServer gefunden.

Hier habe ich nun die Lösung gefunden.

Um herauszufinden was denn alles an Port verwendet wird kann man diesen Befehl verwenden:
netstat -antuwp


Um ZendStudio auf IPv4 umzubiegen muss man in der ZendStudio.ini ( befindet sich im Installationsverzeichnis ) folgendes eintragen:
-Djava.net.preferIPv4Stack=true


Damit geht es dann wieder.

Das hätte mir Tage sparen können....