Hallo!
Mein Name ist David Müller, ich arbeite bei der Public Cloud Group und wohne in Frankfurt. Hier geht es hauptsächlich um Webentwicklung.Kategorien
- webdev (131)
- php (84)
- Javascript (32)
- Datenbanken (22)
- Software Engineering (12)
- Performance (8)
- Security (27)
- PHP-WTF (11)
- Best of the Web (13)
- Quicktips (32)
- Linux (4)
- Java (3)
- misc IT (10)
- Persönlich (9)
- webdev (131)
Blogroll
Neueste Kommentare
- Tristan Tate bei Javascript: Arrays kopieren
- Daniel Marschall bei Dealing with Trusted Timestamps in PHP (RFC 3161)
- Login Mit Facebook Tutorial – Logini helper bei Facebook API – Tutorial
- PHP validation/regex for URL - Design Corral bei Why URL validation with filter_var might not be a good idea
- Manuel bei Meine ultimativen Buchempfehlungen
Archiv des Autors: david
Warum URL-Validierung mit filter_var keine gute Idee ist
Prefer this in English? Why URL validation with filter_var might not be a good idea
Als uns mit PHP 5.2 die filter_var-Funktion geschenkt wurde, war die Zeit solcher Monster vorbei (hier entliehen):
$urlregex = "^(https?|ftp)\:\/\/([a-z0-9+!*(),;?&=\$_.-]+(\:[a-z0-9+!*(),;?&=\$_.-]+)?@)?[a-z0-9+\$_-]+(\.[a-z0-9+\$_-]+)*(\:[0-9]{2,5})?(\/([a-z0-9+\$_-]\.?)+)*\/?(\?[a-z+&\$_.-][a-z0-9;:@/&%=+\$_.-]*)?(#[a-z_.-][a-z0-9+\$_.-]*)?\$"; if (eregi($urlregex, $url)) {echo "good";} else {echo "bad";}
Die simple, aber effektive Syntax:
filter_var($url, FILTER_VALIDATE_URL)
Als dritten Parameter können Filter-Flags übergeben werden, im Bezug auf die URL-Validierung gibt es die folgenden 4 Kandidaten:
FILTER_FLAG_SCHEME_REQUIRED FILTER_FLAG_HOST_REQUIRED FILTER_FLAG_PATH_REQUIRED FILTER_FLAG_QUERY_REQUIRED
Dabei sind die ersten beiden FILTER_FLAG_SCHEME_REQUIRED und FILTER_FLAG_HOST_REQUIRED default.
Ans Eingemachte
So, dann schauen wir uns doch mal ein paar kritische Kandidaten an:
filter_var('http://example.com/"><script>alert("xss")</script>', FILTER_VALIDATE_URL) !==… Den ganzen Post lesen
Veröffentlicht unter php, Security, webdev
3 Kommentare
PHP WTF #8
$array = array(true, null); var_dump(in_array('', $array)); // true var_dump(in_array(0, $array)); // true var_dump(in_array(763, $array)); // true var_dump(in_array('cheese', $array)); // true var_dump(in_array(new stdClass(), $array)); // true var_dump(in_array([], $array)); // true
Tja, PHP und seine automatische Typumwandlung. Wahnsinn, was so alles in dem Array drin ist! in_array bitte nur mit dem dritten Parameter strict auf true benutzen. Sollte ohnehin default sein.
bool in_array ( mixed $needle , array $haystack [, bool $strict = FALSE ] )
Schon besser:
$array = array(true, null); var_dump(in_array('', $array, true)); // false var_dump(in_array(0, $array, true)); // false var_dump(in_array(763, $array, true)); // false var_dump(in_array('cheese', $array, true)); // false var_dump(in_array(new stdClass(), $array, true)); // false var_dump(in_array([], $array, true)); // false… Den ganzen Post lesen
Veröffentlicht unter php, PHP-WTF, webdev
1 Kommentar
Empfehlung: dompdf
Neulich stand das Thema „Rechnungsgenerierung per PDF“ auf der Agenda. Da ich im PDF-Business noch ein unbeschriebenes Blatt war, stand erstmal etwas Recherche an. Zuerst habe ich mir FPDF angeschaut. Ganz ordentliche Dokumentation und soweit auch sehr flexibel, die Tutorials sind ein guter Einstieg. Allerdings ist die aktuellste Version vom Juni 2011, FPDF wird nicht mehr weiterentwickelt.
Danach war der Platzhirsch dran: TCPDF. Aktive Weiterentwicklung und extrem mächtig. Die Beispiele zeigen schon, dass mit TCPDF wohl alles möglich ist. Und dennoch, ich hab‘ recht schnell schlechte Laune dabei bekommen:
$pdf->MultiCell(0, 0, $text, 1, 'L', 0, 0, '', '', true);
Ehm, ja.… Den ganzen Post lesen
Veröffentlicht unter php
6 Kommentare
Windows 8 – neues Feld für Webentwickler
In letzter Zeit bin ich vermehrt im Windows 8 – Umfeld unterwegs. Seit Mitte August gibts die finale Version, die als 90 Tage Evaluierungsversion heruntergeladen werden kann, im Geschäft wird Windows 8 ab dem 26. Oktober stehen. Hab mir auch auf die heimische Kiste Windows 8 als Hauptsystem draufgezogen und kann bisher nicht klagen. Klar, die Metro Windows 8-style UI Modern UI ist arg gewöhnungsbedürftig, aber sonst ist Windows 8 ein rundes System.
Mit Javascript aufs Dateisystem
Eigentlich soll es aber nicht um meine privaten Betriebssystemvorlieben gehen, sondern um die Möglichkeiten, die sich durch Windows 8 für Webentwickler eröffnen. Erstmals lassen sich Windows-Anwendungen (zumindest die Apps für die Modern UI) nicht nur mit C# und VB.net,… Den ganzen Post lesen
Veröffentlicht unter Javascript, misc IT
3 Kommentare
MySQL: Spaß mit float
Man nehme folgenden Code:
DROP DATABASE IF EXISTS test; CREATE DATABASE test; USE test; DROP TABLE IF EXISTS test; CREATE TABLE test (number_double DOUBLE, number_float FLOAT); INSERT INTO test VALUES (1000000000000000, 1000000000000000); SELECT number_double, number_float FROM test;
Okay, soweit noch keine Sensation. Wenn man nun aber MySQL dazu zwingt, den konkreten und exponentenfreien Wert rauszurücken, indem man folgendermaßen selektiert:
SELECT number_double * 1, number_float * 1 FROM test;
offenbart sich:
Gleiches Spiel selbstverständlich, wenn ich den Wert per PHP aus der Datenbank heraushole.… Den ganzen Post lesen
Veröffentlicht unter php, Datenbanken, webdev
4 Kommentare
Javascript in PHP mit der V8-Engine
Googles V8-Javascript-Engine kommt u.a. in Chrome und NodeJS zum Einsatz und ist anerkanntermaßen sauschnell. Umgesetzt wird der Sprachstandard ECMA-262 (5th edition), was aktuell „bleeding edge“ ist. Nun gibt es die Möglichkeit, v8 zu experimentellen Zwecken auch mal aus PHP heraus zu bedienen. Dazu liegt v8js als PECL-Paket vor und kann recht schmerzfrei installiert werden. Aber step by step.
v8js installieren
Habe eben unter Ubuntu 12.04 erfolgreich folgendes Prozedere durchgeführt:
sudo apt-get install php5-dev php-pear libv8-dev build-essential sudo pecl install pecl install channel://pecl.php.net/v8js-0.1.3 sudo echo extension=v8js.so >>/etc/php5/cli/php.ini
Dabei ist 0.1.3 die derzeit aktuellste v8js-Version, also einfach nachschauen was gerade aktuell ist. Soll auch die Apache-PHP-Version v8 abbekommen:
sudo echo extension=v8js.so… Den ganzen Post lesen
Veröffentlicht unter php, Javascript, webdev
2 Kommentare
PHP WTF #7
Direkt entliehen von hier und ein schönes Beispiel für PHPs Handling mit Unicode-Zeichen:
<meta charset="utf8"> <?php $a = 'äa'; echo "with space: " . $a[0] . " " . $a[1] . "<br />"; //� � echo "without space: " . $a[0] . $a[1] . "<br />"; //ä
bzw. analog dazu:
<meta charset="utf8"> <?php $a = 'äa'; echo "substr 0,1: " . substr($a, 0, 1) . "<br />"; //� echo "substr 0,2: " . substr($a, 0, 2) . "<br />"; //ä
Klar: Das ä belegt 2 Byte:
<?php $a = 'äa'; echo "strlen: " . strlen($a) . "<br />"; //3 echo "mb_strlen: " .… Den ganzen Post lesen
Veröffentlicht unter php, PHP-WTF, webdev
4 Kommentare
Best-of-the-Web 10
Neue Linkwelle!
- PHP most watched repositories – Die auf Github meistbeobachteten PHP Repos.
- PHP in the Dark: Input/Output – Eingabe / Ausgabe über die Konsole verarbeiten. Parameterverarbeitung etc.
- AbsoluteChaos.php – Quellcode bei Github, angelehnt an den Netflix Chaos Monkey
- Google Analytics datenschutzkonform einsetzen – Netter Step-by-Step Guide, wie man mit Analytics garantiert auf der sicheren Seite ist.
- Programming Languages Reference Sheets – Tolle Gegenüberstellung der meistverwendeten Sprachkonstrukte in zich Sprachen.
- Apigee API Console: explore, test and debug APIs – Mit APIs leicht rumprobieren. Foursquare, Facebook, Twitter, LinkedIn … werden angeboten.
- Demo des PHPIDS – Hat mir Spaß gemacht, damit rumzuspielen.
Veröffentlicht unter php, Best of the Web, webdev
Hinterlasse einen Kommentar
Umkreissuche: Lat/Long und der Radius
Aufgabenstellung: Ich weiß, wo ich mich befinde (Lat / Long, ist ja aus den Smartphones easy herauszubekommen) und habe einen Radius in km, in dem ich POI’s mit der Open Streemap API suchen möchte.
Problem: Die OSM API bietet keine (mir bekannte) Möglichkeit, um meinen aktuellen Standort herum eine Radius-Suche in km auszuführen, sondern hätte gern eine Bounding Box angegeben, die die Ecken der Box als Geo-Koordinaten angibt – siehe hier:
http://www.overpass-api.de/api/xapi?node[bbox=8.62,49.85,8.68,49.89][amenity=fast_food|pub][@meta]
Dabei spezifiziert der Parameter bbox die Lat/Long-Koordinaten in der Reihenfolge links, oben, rechts, unten.
Dazu erstmal zum Verständnis:
- Der Breitengrad (Latitude) gibt die Nord-Südachse an, „50“ ist nördlicher als „49“
- Der Längengrad (Longitude) gibt die Ost-Westachse an, „5“ ist westlicher als „6“
Berechnung
Nun haben wir also den eigenen Standort, wissen über Lat/Long Bescheid und wollen die Eckpunkte für die oben angesprochene Bounding Box errechnen.… Den ganzen Post lesen
Veröffentlicht unter php, webdev
1 Kommentar
Open Streetmap API Tutorial: Umkreissuche
Für ein Hochschulprojekt („Ortsbezogene Freizeitgestaltung“) gilt es, die Open Streetmap API zum finden von POI’s in der Umgebung zu verwenden. In Darmstadt ist auf der OSM fast jede Parkbank kategorisiert. Also frisch ans Werk!
API Overflow! – Kurzvorstellung der einzelnen APIs
- Die eigentliche OSM-Api (aktuell: v0.6) fokussiert sich eher auf das Erstellen, Bearbeiten und Auslesen von speziellen Punkten. Weniger hilfreich für den Zweck der Umkreissuche.
- Die Overpass (X)API macht uns schon glücklicher. Per REST geben wir den Typ der zu suchenden Punkte in einem einzugrenzenden Bereich an. Beispiele folgen.
- Die Nominatim API ist am simpelsten zu verwenden: Einfach als Query-Parameter „Pub, Darmstadt“ angehangen und los gehts.
Veröffentlicht unter php, webdev
2 Kommentare