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
#1062 – Duplicate entry ‚2147483647‘ for key ‚PRIMARY‘
Das war mal wieder grad mal wieder ein Fehler, wie er im Buche steht. Anwendung läuft seit Jahren astrein, aber auf einmal frisst die Tabelle keine neuen Einträge mehr. Als Entwickler sollte einem die Zahl 2147483647 ja bekannt vorkommen. Folgender Ablauf zum reproduzieren:
CREATE TABLE `produkt` ( `artikelnr` int(11) NOT NULL, `preis` float NOT NULL, PRIMARY KEY (`artikelnr`) );
Und der Inhalt:
INSERT INTO produkt (artikelnr, preis) VALUES (2147483647, 4.99); INSERT INTO produkt (artikelnr, preis) VALUES (2147483648, 6.95);
Das zweite insert-Statement liefert: #1062 – Duplicate entry ‚2147483647‘ for key ‚PRIMARY‘.
Simple Erklärung:
… Den ganzen Post lesenThe number 2,147,483,647 is the maximum value for a 32-bit signed integer in computing.
Veröffentlicht unter Datenbanken, webdev
7 Kommentare
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
fieser Bug in PHP 5.3 [Update]
Man stelle sich folgenden Quellcode in einem Onlinebanking-Formular vor:
<?php if (!empty($_POST['ueberweisungsbetrag']) && filter_var($_POST['ueberweisungsbetrag'], FILTER_VALIDATE_FLOAT)!==false) { $ueberweisungsbetrag = $_POST['ueberweisungsbetrag']; } else { $ueberweisungsbetrag = 0; } ?> <input type="text" name="ueberweisungsbetrag" value="<?php echo $ueberweisungsbetrag; ?>" />
Sieht ja eigentlich erstmal ganz vernünftig aus, oder? Validierung des einigegebenen $_POST-Betrags, um dem Benutzer bei einem Fehler das erneute eintippen zu ersparen. Wenn man nun allerdings die verdammt kleine Gleitkommazahl 2.2250738585072011e-308 als Betrag eintippt, hat das den gleichen Effekt wie
while (true) {}
Nämlich: Fatal error: Maximum execution time of 30 seconds exceeded in /var/www/test.php on line 3. Diese ominöse Zahl führt also PHP-intern zu einem verrecken des Scripts.… Den ganzen Post lesen
Veröffentlicht unter php, Security, webdev
3 Kommentare
Best-of-the-Web 4
Und hier die nächste Runde an interessanten Links.
- All-In-One cookiefunction – Eine Javascript-Cookie-Funktion die an Einfachheit kaum noch zu unterbieten ist.
- Typvergleiche in PHP – Nette Übersicht von Typvergleichen in PHP
- Simple plugin architecture using php5 Reflection API – Wie man sich mit Reflection eine grundlegende Plugin-Architektur bastelt
Veröffentlicht unter php, Javascript, Best of the Web, webdev
4 Kommentare
Richtige Stelle zum Encoden?
Ich war bisher immer ein Verfechter der „jeglichen Input sofort encoden“-Schiene. Heißt: Bevor ich Benutzereingaben in der Datenbank abspeichere / eine Bestätigungsemail versende etc. werden die Daten encodet (htmlentities oder ähnliches). Nun bin ich auf diesen sehr interessanten Artikel gestoßen (inspiriert durch einen Post zur ungarischen Notation beim phphacker), der folgende Position vertritt:
… Den ganzen Post lesenFor example maybe you want to store these user strings in a database somewhere, and it doesn’t make sense to have them stored HTML-encoded in the database, because they might have to go somewhere that is not an HTML page, like to a credit card processing application that will get confused if they are HTML-encoded.
Veröffentlicht unter Security, webdev, misc IT
8 Kommentare
Überdeckungsorientierte Testverfahren
Unit-Tests sind ja hinreichend bekannt. Die nachfolgend vorgestellten Testverfahren sicher jedoch weniger. Deshalb gibts heut mal einen kleinen Ausflug. Ohne viel Vorgeplänkel stelle ich verschiedene überdeckungsorientierte Testverfahren vor.
Zeilenüberdeckung
Folgender (sinnloser) Code:
function foo($bar) { if ($bar && !$bar) return true; return false; }
Was fällt auf? Die Funktion kann nie true returnen. Durch einen Test auf Zeilenabdeckung kann also erkannt werden, dass hier irgendwas nicht stimmt, weil die return true; – Zeile niemals erreicht wird. Allerdings (großes allerdings!), würde folgende „Umstellung“ des Codes bereits zu einer 100%igen Zeilenüberdeckung führen:
function foo($bar) { if ($bar && !$bar) return true; return false; }
Klasse, oder?… Den ganzen Post lesen
Veröffentlicht unter php, Software Engineering, webdev
4 Kommentare
Was die Cloud, AJAX, HTML5 und NoSQL gemeinsam haben
Antwort: Alles ist fürchterlich cool und wird von den wenigsten Benutzern dieser Ausdrücke wirklich verstanden.
Ich bin Pionier! 1999 lud ich bereits Bilder auf meine GeoCities „Webseite“ und brachte damit meine Daten in der Cloud unter! AJAX war lange Zeit (und ist vielleicht bei manchen immernoch) ein Synonym für alles, was es im Web an coolen Sachen gibt. AJAX hat jetzt allerdings eine starke Konkurrenz: Das mega-abgefahrene HTML5! Ob bunte CSS-Übergänge, Canvas oder WebWorker: Es ist neu, krass und HTML5 ja sowieso.
So, nachdem das mal gesagt wurde, solls um das eigentliche Thema dieses Posts gehen: NoSQL.
Ich finde die aktuelle Situation ja sehr interessant: Bis vor etwa 2 Wochen war NoSQL noch der Stern am Datenbankhimmel.… Den ganzen Post lesen
Veröffentlicht unter Datenbanken, webdev
3 Kommentare
PHP Typehinting schon heute
Ein Traum!
function exampleString(string $string) { echo "'$string' is a string!\n"; } function exampleInt(int $int) { echo "$int is an int!\n"; } function exampleFloat(float $float) { echo "$float is a float!\n"; } function exampleBool(bool $bool) { var_export($bool); echo " is a bool!\n"; } exampleString("Hello World!"); //'Hello World!' is a string! exampleInt(1); //1 is an int! exampleFloat(1.2); //1.2 is a float! exampleBool(false); //false is a bool! exampleBool("not really bool"); /* Catchable fatal error: Argument 1 passed to exampleBool() must be an instance of Bool, string given, called in D:\xampp\htdocs\typehint\example.php on line 23 and defined in D:\xampp\htdocs\typehint\example.php on line 13 */
Und das alles gibts nicht erst in 3 Jahren sondern bereits heute!… Den ganzen Post lesen
Veröffentlicht unter php, webdev
2 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