SWAG DevBlog: Shopware REST API article GET – Nicht dokumentierte Features

Tja da sucht man eine Möglichkeit sich einfach eine Liste aller Artikel für weitere Verarbeitung in Php zu besorgen und wird in der REST API fündig.

Leider gibt es ein Problem wenn man in PHP per:

$client = new ApiClient(...);
$data = $client->get('articles');

einfach die Artikelliste holt. Nicht das es nicht funktioniert, aber es werden maximal 1000 Ergebnisse zurückgegeben. Das blöde ist : Am Anfang fällt das ja garnicht auf.

Zum Glück gibt es hier aber doch noch Zusatzparameter die leider in der Doku (https://developers.shopware.com/developers-guide/rest-api/examples/article/) nicht erläutert sind:

$client = new ApiClient(...);
$data = $client->get('articles?limit=8000');

So gibts dann sogar 8000 Artikel.

$client = new ApiClient(...);
$data = $client->get('articles??limit=1000&start=1000');

So gibts 1000 Artikel, beginnend ab dem 1000sten.

Wäre aber wirklich praktisch wenn diese generellen Parameter in der Doku stehen würden…

Print.css – debugging in Google Chrome

Wie entwickelt man eine print css ? Oder wie findet man einen Fehler darin ? Da in den den üblichen Browsern die print.css nicht angezeigt wird versagen die normalen Debugmöglichkeiten.

Natürlich kann man im Debugger die printcss als screen css laden und dann debuggen, allerdings muss man das nach jedem Seitenrefresh wieder tun. Wer will das schon ?

Print.css debugging mit Google Chrome

Eine möglichkeit schafft hier der Google Browser Chrome, wenn auch etwas versteckt:

Öffne die Seite die du debuggen möchtest wie gewohnt und öffne den Debugger mit F12.
Öffne die Seite die du debuggen möchtest wie gewohnt und öffne den Debugger mit F12.

„Print.css – debugging in Google Chrome“ weiterlesen

Shopware Freitextfelder – Dropdown/Auswahlfeld

Shopware verfügt über die Möglichkeit pro Artikel Benutzerdefinierte Daten zu speichern. In der Regel sind das normale Textfelder. Nötig ist hierfür nicht viel.

Unter „Einstellungen“->“Grundeinstellungen“ gibt es im Artikel die Verwaltung für Freitextfelder.

grundeinstellungen_freitextfelder

Hier finden sich die Felder attr1-attr20. Wer hier die Namen beibehält „Shopware Freitextfelder – Dropdown/Auswahlfeld“ weiterlesen

pthread mit Apache2/php unter xampp

Multithreading mit pthread in PHP ?  Kein Problem. Sollte man zumindest denken. Leider ist es hier so wie so oft, es hakt an Kleinigkeiten. Leider können gerade diese Dinge unheimlich Zeit kosten.

Begonnen wird mit dem download der korrekten Version:
http://windows.php.net/downloads/pecl/releases/pthreads/

Nur leider stellt sich dann, wenn man nach der readme vorgeht schnell Ernüchterung ein. Fehlermeldung bezüglich php_pthreads.dll und/oder phtreadVC2.dll.

Das Archiv das man bei php erhält, hat für den Windowsnutzer nur 3 interessante Dateien:

  • php_pthreads.dll
  • pthreadVC2.dll
  • README.md

Die Installationsanweisung ist kurz, und nicht vollständig:

##### Simple Windows Installation

* Add `pthreadVC2.dll` (included with the Windows releases) to the same directory as `php.exe` eg. `C:\xampp\php`
* Add `php_pthreads.dll` to PHP extention folder eg. `C:\xampp\php\ext`

Ein wichtiges Detail fehlt:

php_threads.dll bzw. pthreadVC2.dll muss entweder der Apache konfiguration hinzugefügt werden, oder in xampp/apache/bin kopiert werden. Leider ist das nirgendwo erwähnt, findet sich aber wenn man lang genug nach diesem Problem bei Google sucht.

Die Vollständige Installation lautet demnach:

„pthreadVC2.dll“ nach „/xampp/php/“ kopieren
„php_pthreads.dll“ nach „/xampp/php/ext“ kopieren
„pthreadVC2.dll“ nach „/xampp/apache/bin“ kopieren
„php_pthreads.dll“ nach „/xampp/apache/bin“ kopieren

in /php/php.ini die Zeile “ extension=php_pthreads.dll“ hinzufügen

Dann funktionierts auch mit den Threads 😉

Majestic 12 Bot (MJ12Bot)

Etwas technisches zu Websiten und Suchmaschinencrawlern : MJ12Bot.

Bei der Durchsicht meiner Logs ist mir der MJ12Bot ins Auge gesprungen. Fast 17% aller Besuche von einem Bot ? Das kann doch nicht ernstgemeint sein. Und dann noch auf URL’s die es unter meiner Domain nie gab, inklusive SQL Injections.. na danke.

Aussperren ?

Die schnelle Lösung, .htaccess Anpassen:

RewriteEngine on
RewriteCond %{HTTP_USER_AGENT} ^MJ12bot/v1\.0\.8.*$
RewriteRule .* – [F]

Was ist Mj12 nun eigentlich ?

Problem erst einmal gelöst. Aber was ist MJ12 ? Hier handelt es sich um eine verteilt agierende Suchmaschine. Es wird sehr aggressiv gecrawlt, an die robots.txt hält man sich auch nicht, also viel mir die Entscheidung das ganze zu Blocken auch nicht weiter schwer.

Oft wird dieser Crawler als „Bad Robot“ bezeichnet. Dazu zählen im allgemeinen Crawler die sich nicht an den guten Ton halten, zu oft crawlen, wiederkehrend nicht existierende URL’s besuchen, die robots.txt ignorieren oder auch SQL Injections in ihren URL’s verwenden. Also all das was eine Suchemaschine eigentlich nicht tun sollte und eigentlich auch (für eine Suchmaschine) keinen Sinn macht.

Ich habe diesen User Agent mit dem oben angegebenen Statement über die .htaccess gesperrt. Aber sollte man das nun wirklich tun ? Gründe gibt es ja dafür…

Den Namen finde ich merkwürdig.. oder doch absichtlich gewählt ? Für alle denen Majestic 12 nicht sagt, es gibt hier einen recht ausführlichen Artikel bei Wikipedia : Majestic 12 bei Wikipedia

Majestic 12 bietet einen sogenannten Site Explorer an. Hier kann jeder zu Domains Informationen zu referenzierenden Domains und Backlinks einsehen. Das ganze aber nur gegen einen kostenpflichtigen Account. Das ist aber auch das einzige was man so auf den ersten Blick von dieser Suchmaschine sieht. Eine Suchmaschine im klassischen Sinne ist es zumindest einmal nicht.

Weitere Informationen dazu gibts hier (in englisch): http://blog.arithm.com/2008/01/16/mj12bot-virus-robot/

Shopware 4.0 – Backend/Frontend Plugin für zusätzliche Felder in Detail & Listing

Für einige Anwendungsfälle reichen leider die möglichkeiten der Freitextfelder in Shopware nicht mehr aus. Das kann schlicht an der mangelden Übersicht liegen, oder daran das es schlicht nur 20 Stück gibt und die bereits besetzt sind.

Hier bietet es sich an das Backend in den Artikeldetails entsprechend per Plugin zu erweitern. Das komplette Demo Plugin gibts unten bei den Links zum Download.

Zusatzfeld in den Stammdaten des Artikels, als einfaches Textfeld
Zusatzfeld in den Stammdaten des Artikels, als einfaches Textfeld

Die Anlage eines solchen Feldes ist eigentlich nicht schwer, einige Dinge müssen aber beachtet werden. „Shopware 4.0 – Backend/Frontend Plugin für zusätzliche Felder in Detail & Listing“ weiterlesen

Magento zeigt nach der Installation im Backend nur Fehler an

Das kommt dir bekannt vor ?

Die Installation erfolgt nach der Anleitung von Magento. Das funktioniert auch alles, aber nach dem Klick in das frisch aufgesetzte Backend kommt bei jeder Funktion die wirklich etwas tut nur die altbekannte Fehlermeldung das die Fehleranzeige unterdrückt ist.

Eine google Suche zeigt schnell : Das Problem haben viele. Allerdings lässt sich leider die Lösung dazu nicht ganz so schnell finden, obwohl sie simpel ist:

„Magento zeigt nach der Installation im Backend nur Fehler an“ weiterlesen

PHP Rootshell R57 / FUD Algorithmus

So hier Teil 2 zur gefundenen Rootshell. Zum Glück ist diese Shell bekannt und wird mittlerweile von Virenscannern entdeckt.

Somit ist dieser Algorithmus nicht mehr das was er vorgibt : FUD.
Diese Bezeichnung wird verwendet für Algorithmen die Viren/Trojaner/Shells etc. so verschlüsseln das sie nicht entdeckt werden.
Laut Wikipedia steht sie für : Fear, Unvertainty and Doubt.

Nocheinmal kurz zum Aufbau der Verschleierung: „PHP Rootshell R57 / FUD Algorithmus“ weiterlesen

Wie sichert man ein produktives Shopsystem nach einem Angriff ?

Früher oder später wird es jedem passieren der eine Webseite, ein Forum oder ein Shopsystem im Internet betreibt: Man schaut auf die eigene Seite und die Startseite ist eine andere (Defacement) oder der Betreiber des Servers schickt einem eine Mail mit dem saloppen Hinweis das man gerade 100.000 Spam emails verschickt habe.

Bei einer privaten Webseite ist das alles noch nicht so schlimm, auch wenn man natürlich für das was man dort tut verantwortlich ist, und darum gehört auch die Vorsorge gegen solche Angriffe sprich Patches. Mehr können die meisten Anwender garnicht tun. „Wie sichert man ein produktives Shopsystem nach einem Angriff ?“ weiterlesen

Primzahlenberechnung

Wie ich heute festgestellt habe kommt mein kleines Programm leider nur mit einem Prozessor klar. Mehrere Kerne sind dem absolut egal, es wird nur einer benutzt.

Tja so ist das mit alter Software! Aber ist ja auch schon etwas in die Jahre gekommen das Programm. Hätte ich piwik nicht wüsst ich nichtmal das jemand das Programm heruntergeladen hat !

Ich nehme das mal als Anlass das Programm neu zu schreiben, ist auf meiner ToDo Liste für Ostern 🙂

Optimierung der Datenbankabfragen von Shopsystemen

Man nehme einen xt:commerce Shop, fülle ihn mit Artikeln und lässt ihn (erfolgreich) laufen. Die Datenbank wächst, und schnell wird der Shop langsam.

Wie bekommt man ihn nun wieder schnell ? Ein neues Shopsystem ist natürlich eine feine Lösung aber nicht immer Praktikabel (zu teuer, fehlende Funktionen, import alter daten funktioniert nicht unbedingt, stillstand des shops). Der Ausgabecache hilft. bedingt.
Ein Artikel wird geändert, die änderung erst angezeigt wenn der Zeitraum für das Caching überschritten wurde. Fehlerhafter Preis eingetragen ? Kann mal passieren. nur ungünstig wenn dann jemand die Produktseite schon aufgerufen hat und die Seite gecacht wurde.

Der cache-Ordner wächst. immens. 1000 Dateien in einem Tag, Umfang 11 MB. Natürlich könnte man jetzt nach jeder änderung im Backend den cache löschen. Das liesse sich auch automatisieren. Lohnt es sich ?

Die Seitenladenzeiten verringern sich (mit Bildern, scripten, etc) um eine Sekunde mit aktiviertem Cache.. Das ist so viel das man es deutlich spürt. Der erste Seitenaufbau dauert trotzdem lange, aber je länger der cache existiert, desto grösser ist die chanche das ein Besucher nicht der erste ist der eine Seite aufruft.
Aus dieser Sicht heraus ist es also Irrsinn den Cache zu löschen. Zumindest den kompletten. Nun habe ich mit dem Caching von xtc noch nicht im Detail beschäftigt, aber es müsste möglich sein beim ändern eines Artikels, die gecachte Version davon, bzw alle Versionen davon, zu löschen.
Der Cache als ganzes bleibt erhalten, nur diese Seite dauert beim ersten laden eben einen Moment länger. Alle haben gewonnen.

Lohnt es sich anzufangen im Systemkern die SQL Abfragen zu optimieren ? Das Team von xtc:modified hat es auf seine art getan, die Datenbank wurde ummodelliert, mit Erfolg.

Reicht es dann nicht eventuell die (korrekten) Indizes in der Datenbank zu setzen ? Theoretisch schon. Es gibt angaben bis 40% geschwindigkeitsgewinn durch richtige Indizes in xt:Commerce Shops (lesende zugriffe), allerdings wer einmal die Diskussion im xtc:modified Forum verfolgt hat über die Einführung der Indizes, und vor allem welcher Indizes versteht sofort warum das alles andere als ein leichtes Unterfangen ist.

Zum Glück kann man alles testen, und die Indizes sind dabei das einfachste also fange ich damit an.