Kategorie-Archiv: Sprachen

Mit PHP7 auf MSSQL-Datenbanken zugreifen unter Mac OS X & MAMP

Wie der Titel schon sagt, hatte ich vor kurzem die Herausforderung, auf eine MSSQL-Datenbank zugreifen zu dürfen. Unter PHP5 war das Ganze relativ mit dem Paket php5-mssql möglich (außer unter Mac OS X). Mit PHP7 ist das mssql-Paket entfallen und wird nicht mehr entwickelt.

Also musste eine andere Lösung her. Diese nennt sich in diesem Konkreten Fall dblib. Hiermit können über PDO dann Datenbankverbindungen zu MSSQL aufgebaut werden. Unter Linux / Ubuntu war das Ganze relativ schnell eingerichtet. Jetzt mussten wir es nur noch unter Mac OS X zum laufen bekommen, um lokal auch entsprechend entwickeln zu können.

Als Basis dient hier FreeTDS, welches die grundlegende Datenbankverbindung dann öffnet. Dblib ist dabei „nur“ eine PHP-Extension, welche entsprechend mit FreeTDS kommuniziert. Soweit so gut.

Dazu hatte ein Arbeitskollege die Idee, PHP7 mit brew zu installieren, welches die entsprechende .so-Datei ebenfalls enthielt. Obwohl ich lokal unter MAMP noch auf Version 7.0.15 bin, konnte ich die .so-Datei von 7.0.19 nutzen. Diese wurde dann in das richtige Verzeichnis unter MAMP gelegt und in der php.ini geladen. Danach konnte die erste DB-Verbindung auch schon aufgebaut werden.

Magento2 Entwicklungsumgebung einrichten – PhpStorm + MAMP

So langsam kommt Magento 2 ja an den Start – auch wir haben mittlerweile den ersten Magento 2 Shop online und so kommt es natürlich, dass immer mehr und mehr Entwickler in den Prozess einbezogen werden und von anderen Entwicklern lernen. Jetzt ist es natürlich so, dass wir ganz am Anfang stehen und genau jetzt noch die Chance haben, von Anfang an alles richtig zu machen. Das ist natürlich nicht so einfach, aber besser jetzt, als am Ende wieder alle abzuholen.

Die Problematik ist, auf allen Systemen den gleichen Stand des Projektes herzustellen. Alle sollen mit dem gleichen Workflow, den gleichen Tools und mit dem gleichen Code-Style arbeiten. Im Idealfall laufen bei jedem Commit dann noch Tools wie phpcs, phpmd oder jshint über den Code und finden „Fehler“ der Entwickler bevor der Stand total kaputt geht und wieder jeder in seinem eigenen Code-Style programmiert. Ich mag das z.B. überhaupt nicht aber Magento liefert einiges schon von Anfang an mit – man muss es nur nutzen! Weiterlesen…

Google Analytics API – Aktuelle Besucherzahlen auf dem Raspberry PI

Heute hat mich Jörg von meintechblog.de gefragt, wie er denn am besten einige Daten über die Google Analytics API abrufen könnte. Gewünscht sind

  • aktuelle Besucherzahl (live)
  • Seitenzugriffe des aktuellen und des letzten Monats

Dem nehme ich mich doch gerne an und mache direkt einmal einen Blog-Post daraus.

Grundlage für den Zugriff auf eine GA-Property per API ist ein sogenannter Service-Account. Dieser bekommt dann Zugriff auf die einzelnen Properties und kann von dort dann auch Daten über die API abrufen. Klingt erstmal einfach, oder? Weiterlesen…

Ruck-Zuck eine Rest-API mit Slim auf die Beine stellen

Unser CRM in der Company ist selbst geschrieben – auf einer etwas spannenden Code-Basis, welche man als Einsteiger in das Projekt nicht unbedingt sofort versteht. Vieles wird global geregelt, Klassen sind eher dekorativ und wenig flexibel und eine Template-Engine oder Design-Patterns sucht man vergeblich. Es gibt kein Framework wie Zend oder Symfony drumherum – wirklich jede Zeile stammt aus eigener Hand.

Heute würde man das natürlich nicht mehr so machen – aber es ist, wie man so schön sagt, „historisch gewachsen“ und würde einen enormen Aufwand mit sich ziehen, den Code aufzuräumen oder gar komplett neu zu schreiben.

Ich wollte jedenfalls eine API für Alfred 2 schreiben, welche nach außen sicher ist und mir Kundendaten, SSH-Zugänge und allen nützlichen Kram rausgibt. Sodass ich am Ende das CRM gar nicht mehr öffnen muss. Hat im ersten Anlauf auch geklappt, sah nur nicht besonders schön aus. Wenigstens bei der API wollte ich ein richtiges Framework aufsetzen und das Ganze „2016-Style“ aufbauen. Mir schien es wie ein geeigneter Zeitpunkt, endlich mal etwas mit dem Slim-Framwork umzusetzen. Weiterlesen…

Codewars – so macht Fortbildung Spaß!

Eventuell habt ihr schon einmal von Codewars gehört?! Dabei handelt es sich um eine Plattform, auf welcher andere Entwickler Aufgaben (Katas) in Textform stellen können, welche dann gelöst werden sollen. Dabei ist natürlich Kreativität gefragt. Für jede gelöste Aufgabe bekommt man Punkte und erhöht sein Level. Die einzelnen Aufgaben sind in verschiedene Schwierigkeitsgrade gegliedert und man bekommt je nach Komplexität unterschiedlich viele Punkte.

Klingt erstmal simpel und langweilig – aber macht unglaublich viel Spaß! Die Challenge besteht weniger darin, die einzelnen Aufgaben einfach nur zu lösen. Viel mehr will man diese möglichst kurz und intelligent lösen. Nachdem man eine Aufgabe gelöst hat, bekommt man die Lösungen der anderen zu sehen. Hier gibt es schon gewaltige Unterschiede in der Länge des Codes.

Hier ist für mich auch der größte Lerneffekt zu verzeichnen. Man hat sich eine Weile mit einem Problem beschäftigt und ist zu einer Lösung gekommen. Aber ob das nun gut und schlau gemacht ist? Weiß man normalerweise nicht. Bei Codewars beschäftige ich mich dann länger mit den Ansätzen von anderen Entwicklern und lerne so, viel schnelleren und performanteren Code zu schreiben. Weiterlesen…

Hmac SHA256: Die Alternative zu HTTP Basic-Auth

Das klingt jetzt erstmal kompliziert, aber es ist notwendig. Das Problem ist, dass die HTTP-Basic-Auth immer nur über HTTPS Sinn macht, da ansonsten die HTTP-Header im Klartext zu lesen wären. Mit „Hmac SHA256“ könnte man sogar per HTTP relativ sicher Daten austauschen. Natürlich könnten die Daten selbst dann mitgelesen werden, aber niemand könnte die Daten abändern um sich z.B. selbst einen User anzulegen.

Wie funktioniert das?

Relativ simpel. Hier setzt die PHP-Funktion hash_hmac an. Diesen Methode nutzen zum Beispiel Facebook, Instagram oder Amazon S3 in den REST-Services. Hierzu wird einfach ein Secret-Key erstellt, der von beiden Parteien bekannt ist. Dieser wird dann genutzt, um Nachrichten zu Hashen. Dieser Hash wird dann gemeinsam mit der Nachricht übermittelt.

Die Gegenseite prüft dann mit dem Secret wieder, ob die Hashes übereinstimmen und führt die gewünschte Aktion aus. Der schlaue Leser stellt nun fest, dass man doch einfach eine Nachricht abfangen könnte, und später erneut senden. Das ist soweit auch richtig – vor Replay-Attacken schützt diese Methode nicht! Außerdem sollten die übermittelten Daten nicht sensibel sein – andernfalls muss man doch wieder auf HTTPS zurückgreifen!

Um sich vor Replay-Attacken zu schützen, muss man der Nachricht einfach nur einen Zeitstempel oder eine Message-Id mitgeben. Diese speichert man dann auf der Gegenseite ab, und erlaubt das erneute Ausführen von ein und der selben Message-Id oder älteren Nachrichten nicht mehr.

Kann man aus technischen Gründen nicht auf HTTPS zurückgreifen, könnte man den Body selbst natürlich auch noch verschlüsseln. Hier bietet es sich an, das Ganze über entsprechende RSA-Zertifikate zu lösen. Außerdem hätte man dann sogar die Chance, die Daten zu signieren. So wäre es möglich, alles mögliche zu Übermitteln, ohne dass jemand mit den Daten etwas anfangen kann. Geht man aber so weit, kann man die HMAC-Lösung auch direkt weglassen.

Technik

In PHP ist das Ganze schnell implementiert. Spricht man hier mit bestehenden REST-APIs, muss man sich vorher schlau machen, wie der Hash an die Nachricht gehängt werden soll. Hier gibt es ganz verschiedene Lösungen: Als Zusätzlicher Parameter im JSON, als GET-Parameter, als zusätzlicher HTTP-Header, oder sonst wie.

Ich würde empfehlen, den Hash im Header zu übergeben. So trennt man etwas intelligenter die Daten, und muss sich auf der Gegenseite nicht so viele Gedanken machen, wie man die Nachricht denn nun auseinander nehmen muss, bevor man den Hash kontrolliert.

Recht einfach, oder?

AngularJS macht Lust auf mehr

Das Problem kennt jeder: Man hört von einer neuen Technologie oder einem neuen Framework, und möchte sich damit mal beschäftigen, macht es aber am Ende eigentlich nicht. Oder man macht es nur so Oberflächlich, dass man den Mehrwert für sich nicht so richtig erkennt. So ging es mir mit AngularJS. Es steht schon so lange auf meiner ToDo-Liste, dass Thema einmal genauer anzuschauen, aber erst vor kurzem habe ich mir wirklich Zeit dafür genommen.

Und was ist das Ergebnis? Ich ärgere mich, dass ich das nicht schon viel eher gemacht habe! Dabei habe ich mich schon häufig gefragt, wie manche Web-Apps gebaut wurden. Oder viel mehr: Wie behalten die Entwickler den Überblick in so riesigen UIs? Und ich glaube, dass ich für mich genau diese Antwort in AngularJS gefunden habe! Weiterlesen…