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: webdev
Best-of-the-Web 9
Es hat sich mal wieder was angesammelt!
- Horizontal reusability with traits – Bisher bester Artikel zum neuen PHP 5.4 Feature Traits.
- How to Create Scheduled Events in MySQL – Zeitgesteuerte Events in MySQL
- Why HTTP_HOST is evil – Warum man vor der $_SERVER – Verwendung den Kopf einschalten sollte.
- How to “steal” Google’s “did you mean” feature – Googles “meinten sie” Feature für eigene Zwecke verwenden
- ANSI Escape Sequences: Colours and Cursor Movement -Farben in der Konsole.
- A Mockery review – Sehr schöne Mocking-Library.
- Reflection over PHPDoc with PHP – PHP Docblocks verarbeiten
Veröffentlicht unter Best of the Web, webdev
Hinterlasse einen Kommentar
Chrome Dev Tools: Insidertipps
Chromes Version von Firebug hat sich ordentlich gemausert. Inspiriert durch dieses Video gibts hier nun also ein paar nicht so bekannte Features der Devtools.
Konsole überall einblenden
In jedem Panel der Devtools lässt sich mittels Druck auf ESC die Konsole hochfahren und so simultan arbeiten.
Weitere Shortcuts gibts hier.
Die Funktionen dir() und copy()
Bekanntlich lässt sich durch Eingabe des DOM-Elements in die Konsole das HTML dazu selektiv anzeigen (siehe Bild oben: document.body). Mittels der Funktion dir() lässt sich eine weit detailliertere Auflistung anzeigen, die u.a. auch Event Handler anzeigt:
Veröffentlicht unter Javascript, webdev
2 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
3 nützliche unbekannte PHP Funktionen
Ich hasse ja persönlich Artikel wie diesen (313373 PHP Speed Optimization Tweeks you can not live without … gäähn). Aber beenden wir das Selbstbashing und kommen zum Punkt.
stream_resolve_include_path (php >= 5.3.2)
Manchmal kann es nützlich sein zu wissen, wo genau sich eine includete Datei versteckt. Der include_path macht es einem da ja oft nicht einfach.
1 2 | var_dump(stream_resolve_include_path("fpdf/fpdf.php")); //string(31) "D:\xampp\php\PEAR\fpdf\fpdf.php" |
DateTime::createFromFormat (php >= 5.3.0)
Zum “entwirren” von Zeitangaben gehe ich gerne den Weg über strtotime und date. Etwa so:
Veröffentlicht unter php, Quicktips, webdev
2 Kommentare
PHP Array Dereferencing ausprobiert
Ich konnte es nicht lassen und hab mir den PHP Trunk draufgemacht, um mal etwas mit dem Dereferencing herumzuspielen. Die Version im Trunk hört auf 5.3.99 und kann für die SVN-faulen als Snapshot hier geladen werden. Gleich mal etwas Konsolenromantik:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | dav@david:/var/www$ php --version PHP 5.3.99-dev (cli) (built: Mar 28 2011 21:51:08) Copyright (c) 1997-2011 The PHP Group Zend Engine v2.4.0, Copyright (c) 1998-2011 Zend Technologies dav@david:/var/www$ cat dereferencing.php <?php function test() { return array("foo" => "bar"); } print "Output: " . test()["foo"] . "\n"; dav@david:/var/www$ php dereferencing.php Output: bar |
Joa, was soll ich sagen? Geht alles genauso, wie man sich das wünscht. Um mal ein komplexeres, sinnloses Beispiel auf den Tisch zu legen:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | <?php class Calc { public static function getClosureManager() { return new ClosureManager; } } class ClosureManager { function getSquareClosure() { return array("closure" => function($s) { return array("result" => $s * $s); }); } } $c = Calc::getClosureManager()->getSquareClosure()["closure"]; print $c(4)["result"] . "\n"; |
Geht also auch mit Closures und all dem OOP Schnickschnack. Bei der Bastelei sind mir auch gleich wieder 2 neue Wünsche eingefallen.
Veröffentlicht unter php, webdev
3 Kommentare
MySQL Limit: Anzahl Ergebnisse ohne LIMIT herausfinden
In einigen Situation ist der geneigte Entwickler interessiert an der Gesamtzahl der Ergebnisse, die eine Abfrage ohne LIMIT – Klausel ergeben hätte. Die Holzhammermethode in so einem Fall ist, die Abfrage einfach nochmal ohne LIMIT abzufeuern. Doch es geht besser. Und zwar mit folgendem Konstrukt:
1 2 3 4 5 6 | SELECT SQL_CALC_FOUND_ROWS productid, price, stock FROM products WHERE price > 100 LIMIT 10, 30; SELECT FOUND_ROWS(); |
Durch das “Einschleusen” von SQL_CALC_FOUND_ROWS können wir direkt danach mit FOUND_ROWS() die Gesamtzahl an Ergebnissen erfragen. Für den Fall, dass nur ein Attribut selektiert werden soll, kann man auch direkt eine Abfrage draus machen:
1 2 3 4 5 6 | SELECT SQL_CALC_FOUND_ROWS productid FROM products WHERE price > 100 LIMIT 10, 30 UNION SELECT FOUND_ROWS(); |
Auf die Art und Weise wird an das Resultset als letzte Zeile noch die Gesamtzahl an Ergebnissen ohne LIMIT angehangen. Mehr dazu direkt im MySQL Manual.
Veröffentlicht unter Datenbanken, Quicktips, webdev
9 Kommentare

