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 der Kategorie: Quicktips
PHP WTF #3
Und ein neuer WTF-Teil (Teil 1, Teil 2)!
var_dump(1/3 + 4/3 == 5/3);
Ergebnis? false natürlich! Wie auch sonst, wär ja anderenfalls kein WTF. Genaugenommen hat das „Phänomen“ nichts mit PHP zu tun sondern mit Floating Point-Berechnungen und deren Präzision. Trotz allem hat mich der Spaß gerade eine Viertelstunde Debugging-Zeit gekostet, und zwar in C++. Deswegen mal kurz in PHP getestet – mit gleichem Ergebnis.
Und noch einer:
var_dump(19.99 + 19.99 == 49.98); //bool(false)
Richtigstellung: Schande über mein Haupt und danke an Enrico (siehe Kommentar). Grober Rechenfehler meinerseits. Das Ergebnis lautet natürlich nicht 49.98, sondern 39.98, was dann auch zu einem bool(true) führt.… Den ganzen Post lesen
Veröffentlicht unter php, PHP-WTF, Quicktips, webdev
3 Kommentare
Objekte werden per Referenz übergeben – oder?
Beim Durchstöbern von Rudi’s PHP Labor bin ich auf diesen interessanten Artikel gestoßen, den ich hier gern nochmal aufwärmen möchte.
Etwas Code zum warmwerden:
<?php function modify(StdClass $t) { $t->foo = 321; } $instance = new StdClass; $instance->foo = 123; modify($instance); print $instance->foo;
Und, was kommt raus? Richtig! 321! Schließlich wird eine Referenz des Objekts übergeben. Wenn ich nun aber in der modify-Funktion die Variable, überschreibe…
<?php function modify(StdClass $t) { $t = new StdClass; $t->foo = 321; } $instance = new StdClass; $instance->foo = 123; modify($instance); print $instance->foo;
… lautet das Ergebnis auf einmal 123! Also doch nicht ganz so referenzig.… Den ganzen Post lesen
Veröffentlicht unter php, Quicktips, webdev
Hinterlasse einen Kommentar
Niemand soll wissen, dass die Webseite mit PHP läuft!
Kleines Easteregg: Einfach mal an eine beliebige URL
?=PHPE9568F36-D428-11d2-A769-00AA001ACF42
anhängen, bei mir sieht das so aus.
Toll, oder? Weiterhin verraten die Response-Headers ungeniert, was los ist:
Wenn in der php.ini nun die Einstellung expose_php = Off getätigt wird, klappt weder das „Easteregg“ mit dem PHP-Bild, noch kriegt man über die Response-Header die PHP-Version mitgeteilt:
Wenn man nun noch die .php Extension „weg-modrewrite-d“, müsst ihr euch nicht mehr schämen, dass ihr PHP verwendet. Außer natürlich, display_errors ist an und offenbart all eure Programmierfehler ;).… Den ganzen Post lesen
Veröffentlicht unter php, Quicktips, webdev
3 Kommentare
PHP-Includes visualisieren mit Inclued
Ich bin ja ein großer Freund von statischer Codeanalyse und optischer Aufbereitung (siehe auch Codevisualisierung mit pfff: PHP Frontend For Fun). Nun bin ich auf was neues aufmerksam geworden: Inclued. Mittels dieses coolen Tools lassen sich Includes zwischen Dateien einer Webanwendung visualisieren – sowas kann durchaus nützlich sein, wenn man sich in eine Anwendung reinschaffen möchte oder einen Überblick erhalten will.
Installationsanleitung
Ich gehe hier von Ubuntu aus, sollte aber mit kleinen Abwandlungen auch mit anderen Distributionen gut gehen.
- Wir brauchen phpize, um inclued zu installieren. Das ist im php-dev Paket enthalten.
sudo apt-get install php5-dev
- Nun wird inclued selbst über pecl installiert:
sudo pecl install inclued-alpha
- Zur php.ini
Veröffentlicht unter php, Quicktips, webdev
2 Kommentare
PHP-Errors zu Exceptions konvertieren
Wie wir ja alle wissen, ist der @-Fehlerunterdrückungs-Operator gemeinhin böse. Was aber nun, wenn wir mit PHP-eigenen Funktionen arbeiten müssen, die im Fehlerfall eine Warning produzieren?
Was ich meine ist z.B. file_get_contents. Wenn die aufzurufende URL nicht erreichbar ist, heißt es
Warning: file_get_contents() [function.file-get-contents]: php_network_getaddresses: getaddrinfo failed: Der angegebene Host ist unbekannt
Unschön. Glücklicherweise kann man mittels eines eigenen Errorhandlers einen Workaround basteln, indem der Fehler zu einer Exception konvertiert wird:
function errorhandler($code, $error, $file, $line) { throw new ErrorException($error, $code, 0, $file, $line); } set_error_handler("errorhandler"); try { echo file_get_contents("http://www.this-is-not-a-real-url.org"); } catch (ErrorException $ex) { echo "Die Webseite ist gerade nicht erreichbar"; }
Im Produktivbetrieb sollten die Fehler bekanntlich ohnehin nur geloggt und nicht angezeigt werden, trotz allem fühle ich mich wohler mit solch einer Lösung.… Den ganzen Post lesen
Veröffentlicht unter php, Quicktips, webdev
Hinterlasse einen Kommentar
Codevisualisierung mit pfff: PHP Frontend For Fun
Das von facebook stammende Tool soll vor allem eine Hilfe zur Codevisualisierung und beim Refactoring sein. Kennt ihr diese anschaulichen Grafiken, die euren Festplatteninhalt visualisieren und auf vermeintliche Platzfresser aufmerksam machen (sowas in der Art)? Das macht pfff – nur eben auf Sourcecode zugeschnitten.
Was sagt facebook selbst dazu?
pfff is a set of tools and APIs to perform some static analysis, dynamic analysis, code visualizations, code navigations, or style-preserving source-to-source transformations such as refactorings on source code.
Finde ich – ohne es bis jetzt produktiv eingesetzt zu haben – zumindest mal eine nette Spielerei (…was ja auch der Namensbeisatz for Fun andeutet).… Den ganzen Post lesen
Veröffentlicht unter php, Quicktips, webdev, misc IT
1 Kommentar
Die Wahrheit über den Doctype
Mit dem neuen, ultracoolen und leicht zu merkenden HTML 5-Doctype
<!DOCTYPE html>
kamen viele Bedenken auf. Ist meine Webseite dann überhaupt noch standardkonform? Falle ich nicht dem Quirks-Mode der Browser zum Opfer? Nichts davon ist der Fall. Der Doctype ist generell extrem überschätzt! Kein Browser wird sich wirklich darum kümmern, was für ein Doctype angegeben ist.
Was in Wirklichkeit passiert
Es wird (einheitlich bei allen Browsern) danach geschaut, ob überhaupt ein Doctype angegeben wurde. Ist das nicht der Fall, gehts direkt in den Quirksmode. Wird nun ein Doctype gefunden, gibt es nur noch eine „Chance“, doch noch in den Quirksmode zu geladen: Es wird ein Uralt-Doctype wie
<!DOCTYPE… Den ganzen Post lesen
Veröffentlicht unter Quicktips, webdev
2 Kommentare
YODA Conditions
Yoda dreht bekanntlich gern Satzbestandteile um. Das hat jetzt noch nichts direkt mit PHP zu tun. Zäumen wir das Pferd mal andersherum auf. Was fällt hier auf?
function doSomething() { return false; } $res = doSomething(); if ($res = false) { echo "1"; } else { echo "2"; }
Der geübte Debugger sieht sofort: Im if haben wir eine Zuweisung und keinen Vergleich. PHP findet das voll okay, IDEs geben in der Regel einen Warnhinweis. Raus kommt im Übrigen 2.
Was wäre jetzt, wenn wir frei nach Yoda geschrieben hätten:
if (false = $res) { echo "1"; } else { echo "2"; }
Parse error: syntax error, unexpected ‚=‘.… Den ganzen Post lesen
Veröffentlicht unter php, Quicktips, webdev
1 Kommentar
Quicktip: Integer Validation
Oft ist es ja so, dass man einen Integer validieren möchte, der allerdings als String vorliegt (bei SOAP z.B.). Das heißt, dass uns is_int nicht weiterhilft, wie folgender Schnippsel zeigt:
var_dump(is_int("12")); //false
Klar, ist kein int – kann man PHP keinen Strick draus drehen. Alternative ist is_numeric.
var_dump(is_numeric("12")); //true
Ah, wunderbar – warum auch immer jetzt auf einmal Strings kein Problem mehr darstellen. Aber:
var_dump(is_numeric("12.123456")); //true
Klar irgendwie, „numeric“ heißt nicht zwangsläufig gerade. Deswegen (meines Erachtens nach der beste Weg): intval
intval konvertiert (sofern möglich, also wenn etwa ein int in einem String vorliegt) zu Integer, allerdings kommt bei allen anderen Inputs (bspw.… Den ganzen Post lesen
Veröffentlicht unter php, Security, Quicktips, webdev
1 Kommentar
Web-Performance: Best Practices
Was folgt ist eine Mischung aus der sehr guten (!) Artikelserie „Make the web faster“ von google und einigen persönlichen Ergänzungen und Erfahrungen. Erhebt keinerlei Anspruch auf Vollständigkeit und mischt server- sowie clientseitige Tipps querbeet. Ich gehe hier nicht besonders ins Detail, nenne aber genug Stichwörter, zu denen man sich dann schlaugooglen kann. Als Abschluss der Einleitung möchte ich noch auf den Gott der Webperformance verweisen, ohne dessen Bücher und Analysen wir sicher noch nicht da wären wo wir heute sind.
- Javascript so weit wie es geht asynchron laden bzw. ans Seitenende befördern, da Browser JS-Dateien in der Regel nicht parallel laden.
Veröffentlicht unter php, Javascript, Datenbanken, Performance, Security, Quicktips, webdev
1 Kommentar