Kategorien
- webdev (97)
- php (62)
- Javascript (20)
- Datenbanken (20)
- Software Engineering (11)
- Performance (7)
- Security (18)
- PHP-WTF (7)
- Best of the Web (8)
- Quicktips (23)
- Linux (4)
- Java (3)
- misc IT (7)
- Persönlich (7)
- webdev (97)
Was geht hier ab?
Hi! Ich heiße David, studiere an der Hochschule Darmstadt Informatik und blogge über webdev-related Themen mit Fokus auf PHP
Oft gelesen
Blogroll
Archiv der Kategorie: php
PHP WTF #7
Direkt entliehen von hier und ein schönes Beispiel für PHPs Handling mit Unicode-Zeichen:
1 2 3 4 5 | <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:
1 2 3 4 5 |
Klar: Das ä belegt 2 Byte:
1 2 3 4 |
Schon besser:
1 2 3 4 5 |
Mir war das zwar im Prinzip schon alles klar, durch so ein Beispiel wird aber nochmal deutlich, dass man die nicht-mb_* – Funktionen partout meiden sollte.
Veröffentlicht unter php, PHP-WTF, webdev
3 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.
Veröffentlicht unter Best of the Web, php, 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:
1 | 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:
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.
Veröffentlicht unter php, webdev
2 Kommentare
Erwartete Exceptions richtig testen
Der klassische Ablauf beim Testen von Code, der eine Exception werfen soll, ist der Folgende (PHPUnit):
1 2 3 4 5 6 7 | /** * @expectedException InvalidArgumentException */ public function testException() { throw new InvalidArgumentException(); } |
Problem dabei: Wir haben nicht spezifiziert, an welcher Stelle die Exception geworfen werden soll. Außerdem können wir nicht prüfen, ob die geworfene Exception genau die erwartete oder nur igendeine war.
Jetzt lässt sich das noch aufbohren:
1 2 3 4 5 6 7 8 | /** * @expectedException InvalidArgumentException * @expectedExceptionMessage Right Message */ public function testExceptionHasRightMessage() { throw new InvalidArgumentException('Right Message'); } |
Auch damit werde ich nicht glücklich. Wenn ich jetzt z.B. mehrere Exceptions in einem Test prüfen möchte (guter Stil hin oder her) stößt man an die Grenzen diesen Ansatzes.
Etwas feingranularer ist das Handling mit der nachfolgend vorstellten Methode setExpectedException.
Veröffentlicht unter php, webdev
3 Kommentare
Per PHP-CLI die eigene IP herausfinden
Bekanntlicherweise ist die IP per $_SERVER auf der CLI nicht verfügbar. Was hilft: gethostbynamel. Die Funktion liefert eine Liste von IPv4 Adressen zu einem Hostname zurück.
1 2 3 4 5 6 7 8 9 | print_r(gethostbynamel("microsoft.com")); /* Array ( [0] => 207.46.232.182 [1] => 207.46.197.32 ) */ |
Lässt sich leicht abgewandelt auch zum herausfinden der eigenen IP benutzen:
1 2 3 4 5 6 7 8 9 | function getOwnIP($default = false) { $ips = gethostbynamel('localhost'); foreach ($ips as $ip) if ($ip != "127.0.0.1") return $ip; return $default; } |
Veröffentlicht unter php, Quicktips, webdev
4 Kommentare
Interessante Testarten: Mutationstest und Fuzzing
Bin heute über 2 Testverfahren gestolpert, die ich vorher noch nicht auf der Rechnung hatte. Fangen wir beim Mutationstest an.
Mutationstest
Dabei wird die zu testende Applikation vollautomatisch von einem Programm abgeändert. Das kann etwa so aussehen, dass in einer Schleife aus einem <= ein < gemacht wird. Hier orientiert sich die Art der eigebauten Fehler an den gern von Programmierern gemachten, also z.B. Schleifengrenzen und Verschachtelungen. Wichtig ist hierbei, dass pro Durchlauf immer nur eine Manipulation vorgenommen wird, sonst lässt sich die Auswirkung schließlich schlecht lokalisieren.
Veröffentlicht unter php, Security, Software Engineering, webdev
Hinterlasse einen Kommentar
Blick über den Tellerrand: LINQ
Ich habe aktuell beruflich wenig mit PHP zu schaffen, erklärt wohl auch die momentane Post-Flaute etwas. Joa, der angenehme Nebeneffekt davon ist aber, dass man beim Rumschlagen mit anderen Sprachen auch andere Konzepte verinnerlicht. So bin ich im Microsoft C# – Umfeld auf LINQ gestoßen. Bedeutet Language INtegrated Query. Was erstmal so unspektakulär klingt, ist eine verdammt mächtige Abfragesprache für Container (Arrays, Listen, Collections …).
Veröffentlicht unter php, webdev
7 Kommentare
Aufteilen von Funktionen = doppelte Validierung
Für ein kleines Nebenprojekt bin ich am Werkeln mit codeigniter. Soweit so gut. Ich brauchte eine Funktion, die den Bildupload und anschließendes resizing erledigte. Kein Problem, dank Upload-Klasse und Image Manipulation-Klasse. Okay, das hier soll aber keine Lobhymne auf ein Framework werden, sondern ein allgemeines Thema ansprechen.
Ich hab also meine Funktion, die upload und resize erledigt. Wens interessiert:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 | public function process_image($cat_id) { //---------------------------------- //Upload if (intval($cat_id) <= 0) throw new Exception("Invalid Video ID"); $upload_config = array ( 'upload_path' => IMAGES_PATH, 'allowed_types' => 'gif|jpg|png|jpeg', 'overwrite' => true ); if (!is_dir(IMAGES_PATH)) throw new Exception("Could not find Upload directory"); $this->load->library('upload', $upload_config); if (!$this->upload->do_upload()) throw new Exception("Upload Error: " . $this->upload->display_errors()); $upload_info = $this->upload->data(); //---------------------------------- //Resize $thumbname = IMAGES_PATH . 'thumb_' . $cat_id . '_' . uniqid() . "." . $upload_info['image_type']; $resize_config = array ( 'source_image' => $upload_info['full_path'], 'maintain_ratio' => false, 'width' => 65, 'height' => 65, 'new_image' => $thumbname ); $this->load->library('image_lib', $resize_config); if (!$this->image_lib->resize()) { @unlink($upload_info['full_path']); throw new Exception("Resize Error: " . $this->image_lib->display_errors()); } @unlink($upload_info['full_path']); return true; } |
Nunja, als Mensch der die OOP Grundprinzipien hochhalten möchte, schmerzt es natürlich, dass die Funktion sich um Upload und Resize kümmert. Ich trenne also die Funktionen auf, Wiederverwendbarkeit und so…
Veröffentlicht unter php, Software Engineering, webdev
9 Kommentare
Best-of-the-Web 8
Ding Ding Ding. Runde 8!
- Mozilla wagt neue CSS-Experimente – Kleine Zusammenstellung, was bei Firefox 4 CSS-technisch neu kann.
- 3 Tenets for Implementing a REST API – Versionierung einer REST-API. Sollte man die API-Version über HTTP-Header oder die URL regeln?
- Online HTML5 JSON Report format – JSON lesbar machen.
- The current State of HTML 5 Forms – Welcher Browser unterstützt welches Formelement?
- Kleine Lizenzgeschichte des PHP Handbuchs – Was man bei der Verwendung des Beispielcodes aus dem Manual beachten sollte.
- Software Licenses For Dummies – Den Lizenzdschungel menschenlesbar erklärt.
Veröffentlicht unter Datenbanken, php, Software Engineering, webdev
Hinterlasse einen Kommentar