Null coalescing in PHP

Heute habe ein neuen Feature von PHP kennengelernt, das wirklich praktisch ist: Null coalesing mit dem tenären Operator. (Ok, das klingt für ungeübte Ohren vielleicht ein bisschen seltsam :))

Null coalescing ist ein Feature dass viele Programmiersprachen haben, meistens mit Hilfe des Operators „??“ (Zwei Fragezeichen). Der Ausdruck gibt den linken Wert zurück, wenn dieser nicht null ist, ansonsten den rechten. Also z.B. so:


action = getAction() ?? 'save';

Weiterlesen

CakePHP – Ein Review

Heute fragte mich jemand, ob ich eigentlich etwas kennen würde, um mit PHP „schöner“ zu programmieren. Ich dachte zugegebener Maßen erst an einen Editor (da würde ich PhpStorm (gibt’s für Studenten umsonst!) empfehlen), es wurde dann aber relativ schnell klar, das es eher um sowas wie ein PHP-Framework geht. Um es gleich mal klar zu sagen: Ohne irgendein Framework würde ich nichts in PHP schreiben, was länger als 100 Zeilen ist. Man muss das Rad ja nicht immer neu erfinden, und dabei die gleichen Sicherheitslücken wieder einbauen 🙂

Nun entwickele ich für meinen Hiwi-Job schon rund 4 Jahre in PHP. Dabei habe ich die erste Zeit eine Anwendung weiter gepflegt, die ohne ein Framework geschrieben war. Nach einiger Zeit war klar, das es so nicht weitergehen konnte, die Anwendung war, auch durch ihr Alter und die Weiterentwicklung von PHP, unwartbar geworden und lief mit schnellen Schritten auf das End-Of-Life „ihrer“ PHP-Version zu. (Mehr sage ich jetzt nicht, der Autor ließt hier mit 🙂 ). Es musste also eine Neuentwicklung her, natürlich auf Basis eines Frameworks. Damals wurde mir CakePHP empfohlen (damals noch Version 2), was ich dann relativ unreflektiert übernommen habe. Jetzt nähert sich die Anwendung langsam der Fertigstellung, inzwischen basierend auf CakePHP 3. Im Laufe der Entwicklung hat sich eine gewisse Hassliebe zu Cake entwickelt…

Weiterlesen

Kurztipp: Segmentation Fault von PHP mit XDebug unter Ubuntu 15.04

Unser Entwicklungsrechner lief hier lange unter Ubuntu 14.10 LTS, aber nach dem jetzt Ubuntu 15.04 da war, haben wir uns doch mal entschlossen, ein Update zu fahren, in der Hoffnung dadurch ein paar Probleme loszuwerden, die wir hatten. (Und ich wollte mal sehen, wie sich Systemd macht…). Abgesehen von einem kleinen Stromausfall während des Updates und darauf folgender Reparatur auf der Textkonsole (bei Windows wäre ein Neuinstallation nötig gewesen!), lief auch alles gut.

Was leider nicht mehr wollte, war Xdebug. Ohne Debugger liefen die PHP-Skripte perfekt, aber wenn man sie debuggte, wurde komischerweise teilweise Variablen nicht angezeigt und es kam zu sehr unerklärlichen Exceptions, gefolgt von einer tollen Meldung im Apache Log:


[core:notice] [pid 13686] AH00052: child pid 14595 exit signal Segmentation fault (11)

Weiterlesen

Opertunistic Encryption mit Firefox 37 und Ubuntu 14.04 LTS

Firefox 37 hat ein neues Feature: Opertunistic Encryption, oder auch „TLS for http://“. Die Idee ist einfach: Wir versuchen einfach mal, die Seite über HTTPS zu laden, auch wenn das Zertifikat nicht nicht stimmt, behaupten aber auch nicht, die Seite wäre sicher. Einfach, aber wirkungsvoll. Ich finde es aktuell schrecklich, das es entweder verschlüsselt und authentifiziert mit teurem Zertifikat, oder völlig unverschlüsselt gibt. Sollte nicht viel mehr der Unterschied verschlüsselt und nicht authentifiziert (http) oder verschlüsselt und authentifiziert (https) sein?

Natürlich ist es ein leichtes, die Verschlüsselung auszuhebeln, wenn man ein aktiver Angreifer/MITM ist. Aber es hilft gegen passives Belauschen. Und das muss nicht mal die NSA sein, es geht auch um Sachen wie FireSheep. Auf jeden Fall ist die Idee das man so, wenn möglich, ein verschlüsselte Verbindung bekommt, aber da man ja nicht weiß, mit wem man redet, behauptet niemand, das die Verbindung sicher sei.

Weiterlesen

PHP: htmlentities() zerstört UTF-8

htmlentities() ist ja eine Recht nette PHP Funktion um schnell das ganzen HTML aus einem String zu bekommen, weil man den z.B. (als Code) ausgeben möchte. Aber: Die Funktion macht UTF-8 kaputt! Also muss man entweder sowas wie utf8_decode(htmlentities($str)) machen, oder man schaut sich die Argumente noch mal genau an, und stellt fest, dass man das Charset auf explizit angeben kann. Diese Variante lässt UTF-8 am Leben:


htmlentities($str, ENT_COMPAT | ENT_HTML401, "UTF-8");

Weiterlesen

Mein Timetracker

An der Uni habe ich ja nun einen Hiwi-Job, und da sollte man natürlich die Stunden aufschreiben, die mal so arbeitet. Seit ich vor zwei Monaten dort angefangen habe, hatte ich vor, mir dafür ein „kleines“ PHP-Script zu schreiben, damit sich von jedem Rechner aus meine Stunden aufschreiben kann. Nun ist das ganze fertig, und ich finde, es ist gar nicht so schlecht geworden:

Das meiste sind natürlich fertige Sachen, im Hintergrund ist jede Menge jQuery, die Tabelle ist ein jQuery Plugin, Der Datumswähler und der Button unten stammt aus jQuery UI. Das ganze läuft über PHP und MySQL, und ist schön „ajaxifisiert“, sprich kein Neuladen der Seite 😉

Weiterlesen

Aprilscherz: Post-mortem

Ja, schon wieder ein dummer Titel, ich weiß…

Nach dem ja nun wohl jeder begriffen hat, das mein letzter Post ein Aprilscherz war, interessiert den einen oder anderen ja vielleicht auch die Technik dahinter. Die ist nämlich ziemlich interessant.

Die erste Frage war, wie komme ich an die Posts meines Blogs. Als erstes hatte ich überlegt einfach die letzten fünf fest in die Seite einzubauen, aber das fand ich dann doch langweilig. Dann erinnerte ich mich daran, das ich mal etwas über die wp-load-php gelesen hatte. Wenn man diese Datei in ein PHP-Script einbaut, wird WordPress komplett geladen, aber ohne eine Ausgabe zu erzeugen. Jetzt kann man quasi ein WordPress Theme nachbauen. Der folgende Code steckt hinter der Seite:

Weiterlesen

WordPress 3.2: Endlich!

Zuerst: Schöne Ferien! 6 Wochen Zeit für was besseres als Schule… Studienberatung zum Beispiel 🙁

WordPress 3.2 ist jetzt also endlich da. Das neue Layout ist ganz nett, das neue Theme muss ich mir noch mal ansehen. Der neue „Zen“-Editor zum schreiben ohne UI ist ziemlich praktisch, auch wenn die Tastenkombinationen noch einen kleinen Fehler haben.

Doch eine Sache ist da, auf die ich schon ewig gewartet habe: Das neue Linktool.Endlich kann man direkt aus dem Link-Menü nach alten Posts suchen und diese verlinken. Darauf warte ich schon, seit ich WordPress benutze.

Eine andere Sache wurde auch Zeit: Der Support für den IE 6 ist Geschichte, und ein halbwegs modernes PHP und MySQL wird jetzt auch vorausgesetzt. Das ist wirklich praktisch für Plugin Autoren (wie mich) die sich jetzt endlich nicht mehr mit dem uralten PHP und Browser Versionen rumschlagen müssen.

Weiterlesen

Snoopy und der Refresh-Header

Snoopy pompiereNein, um diesen Snoopy geht es nicht. (Aber ich wollte mal wieder ein Bild einbauen 😉 Sondern um die PHP Klasse mit dem gleichen Namen, die einen Webbrowser in simuliert. Damit kann man z.B. in PHP den Inhalt einer anderen Seite abrufen, ohne sich um die Implementierung zu kümmern. Zusätzlich werden z.B. Weiterleitungen auch verfolgt, und Cookies gesetzt.

Und genau da liegt das Problem: Snoopy beachtet nur die beiden Weiterleitungsheader „Location“ und „URI“. Location ist der quasi-Standard, was anderes habe ich noch nicht gesehen.

Weiterlesen

Umzug

Jetzt habe ich es lange genug vor mir hergeschoben, jetzt kommt der lang erwartete Bericht über meinen Serverumzug 😉

Situation am Anfang: Reines Webhosting beim einem Hoster, von dem ich weg wollte. Ein WordPress-Blog (dieser ;)), Maximilians UpdateServer, ein Mantis Bugtracker und meine Emails. Dazu ein Subversion Repository bei Assembla, das mit verschoben werden sollte.

Neue Situation: Ein vServer bei netcup, „ohne alles“. Und doch war der Umzug ziemlich einfach, er hat eigentlich problemlos geklappt. Was ich allen empfehlen kann, die noch nicht so fit mit Linux sind (wie ich…): Baut euren vServer erstmal in einer VM nach, und probiert dort alles aus! Also der kompletten Umzug. Da lernt man eine Menge!

Ich hatte den neuen Server mit einem Monat Vorlauf gemietet, ich hatte also genug Zeit, alles umzuziehen. Als Betriebssystem sollte Debian auf meinem Server zum Einsatz kommen, leider hab ich etwas zu früh angefangen, und noch Lenny verwendet, jetzt muss ich auch Squeeze updaten… Die Installation von Debian war mehr als einfach: Im ControlPanel von netcup das Debian Lenny ohne alles Image ausgewählt, schon steht der Server, und ist per SSH erreichbar.

Weiterlesen