This page intentionally left blank
  Seite:  1 2 3 >> 34 Artikel insgesamt   
Mediawiki: Alle Seiten als PDF

Neulich wurde ich gefragt, wie man alle Artikel eines mediawikis in ein PDF packen könnte.
Über Sinn und Zweck kann man streiten, da sich die Sache aber schnell als schwieriger herausstellte, als ich anfangs annahm, war mein Ehrgeiz geweckt.

Bei mediawiki.org sind zwar mehrere Extensions gelistet, die zum PDF-Export dienen, allerdings galt für alle: Entweder sie funktionieren mit der aktuellen Version 1.37 nicht oder die Installation ist derart komplex mit zig Abhängigkeiten und zu installierenden Serverkomponenten, dass ich darauf erst gar keine Lust hatte (wieso npm installieren, um ein PDF zu erstellen? Geht's noch?)...denn wer weiß, ob die Extension nach der umfangreichen Installation überhaupt funktioniert.

Am Ende hatte ich ein kleines PHP-Skript geschrieben, welches auf die mediawiki-API zurückgreift.
Einzige Abhängigkeiten: htmldoc auf dem Server installieren (dafür ist ein Kommandozeilenzugriff erforderlich) und einen Bot-Zugang in der Wiki erstellen.

Weiterlesen...
 
Shopify und seine APIs

Vielleicht bin ich zu dumm dazu, aber nun stehe ich schon das zweite Mal vor dem Problem, wie ich von extern die Daten von Shopify abzapfen kann, bzw bei einer Bestellung im Shop die Daten der Bestellung (Produkte, Kunde) an eine externe Datenbank weiterleiten kann.

Ich bin zwar mal über "Shopify Flow" gestolpert, aber dies gibt es wohl nur in Verbindung mit "Shopify Plus". Ansonsten müsste es irgendwie eine Möglichkeit mit Hilfe der "Apps" geben (heutzutage sind drei Zeilen Code ja eine Ähpp)

Mal schnell zusammengefasst, was Shopify alles an Schnittstellen bietet:

  • Öffentliche Apps (das, was man so in Shopifys "App Store" findet)
  • Benutzerdefinierte Apps (Da bin ich noch nicht so wirklich hinter Sinn, Zweck und HowTo gekommen)
  • Private Apps (damit kann man schön was für sich selbst basteln, darauf gehe ich noch ein)
  • App-Entwürfe (keine Ahnung. Gibt's halt...steht in der Doku)
  • Webhooks (was ich suche, aber in den Dokus schwer zu finden: Shopify sendet aktiv bei bestimmten Ereignissen Daten an ein externes Skript)

Über Payments-API, Partner-API, Messaging-API, Storefront-API, AJAX-API, Liquid & Co will ich gar nicht erst reden...

Im Folgenden will ich mal schauen, was man mit ner "Privaten App" (ich nenne lieber "Simplen API-Zugriff") und den Webhooks so anstellen kann.

Weiterlesen...
 
CleverReach API via PHP

Neulich musste ich per PHP mit der CleverReach API sprechen.

Der API-Explorer ist cool, aber die Doku hat bei mir für die einen oder anderen Anfangsschwierigkeiten gesorgt.

Den fertigen PHP REST Client, den man auf der Doku-Seite herunterladen kann, brachte ich nicht zum Funktionieren. Irgendwie bin ich immer zu blöd, irgendetwas Fertiges zu verwenden, wenn es nicht komplett dokumentiert wurde.

Naja, habe ich meine CleverReach-REST-PHP-Class halt selbst geschrieben...

Weiterlesen...
 
CURL/PHP und das verfallene Let's Encrypt Zertifikat

Ich fühlte mich für den 30. September 2021 gut gewappnet. Alles getestet, mein Server kommt mit dem ab jenem Tag abgelaufenen DST Root CA X3-Zertifikat von Let's Encrypt zurecht und spielt das neue ISRG Root X1 aus.

Allerdings musste ich just an dem Tag feststellen: Ich kann mit curl bzw. dessen Pendant innerhalb von PHP nichts mehr herunterladen. Certificate error

Ich sage nur immer wieder: Scheiß Zertifikate!

Weiterlesen...
 
Shopify: Bei bestimmten Produkten, ein weiteres Produkt in den Warenkorb legen

Ein Kunde betreibt einen Shop, in welchem er seine Pasta und noch andere italienische Produkte vertreibt. Nachdem bisher nur Trockenpasta verkauft wurde, sollte nun auch noch frische Pasta verkauft werden. Allerdings ist der Versand von frischer Pasta teurer, da Isolationsmaterial und Kühlmittel beigelegt werden müssen.

Keine große Sache, dachte ich mir. Verschiedene Versandtarife für verschiedene Produkte ist ja etwas, was alle möglichen Shops benötigen, also deckt das der verwendete Shopify-Shop sicher mit seinen Versandtarif-Einstellungen ab.
Die Einrichtung sah auch vielversprechend aus: Versandtarif hinzufügen, Produkte auswählen, die den teureren Versand erfordern (kleines Ärgernis, dass sich keine Gruppen/Kategorien auswählen lassen, sondern nur einzelne Produkte), speichern.
Test: Produkt in den Warenkorb, Versandkosten passen, top!

Die Freude war allerdings von kurzer Dauer: Legt man ein weiteres Produkt in den Warenkorb, welches nicht in diesem Versandtarif enthalten ist, werden beim Checkout die normale Versandgebühr plus die erhöhte Versandgebühr berechnet.

Da im Internet keine Lösung mit Bordmitteln zu finden ist, scheint es für diesen vermeintlich oft vorkommenden Fall wirklich von Shopify keine Lösung zu geben.
Diese Problemstellung ist nur mit zusätzlichen kostenpflichtigen "Apps" oder Eingriff in den Template-Code beizukommen.

Natürlich kommt in meinem Fall nur Letzteres in Betracht... ;-)

Weiterlesen...
 
Fritz!Box API TR-064 via PHP

Da mir die tägliche Info-Mail, die man sich von einer Fritz!Box zusenden lassen kann, zu unpraktisch war, hatte ich erst mit dem Gedanken gespielt, diese von einem Server auswerten und umschreiben zu lassen, bin dann aber auf die TR-064-Schnittstelle gestoßen, die neuere Modelle bieten (welche nicht mehr via Telnet ansprechbar sind).

Im Folgenden ein Ansatz, per PHP auf Daten der Fritz!Box zugreifen zu können.
Ein anderer Ansatz, sich die Daten des Web-UIs abzugreifen, ist in diesem Artikel zu finden. Die beiden Ansätze ergänzen sich teilwese, weil ich über diese TR-064 leider nicht an alle gewünschte Daten rankomme.

Weiterlesen...
 
.htaccess: Seite von externem Zugriff schützen

Ich sperre schon lange einige meiner privaten und beruflichen Seiten mit Hilfe einer .htaccess-Datei.
Dazu wird – wie den meisten bekannt sein sollte – eine Textdatei mit dem Namen .htaccess in das Webserver-Verzeichnis, für welches (und dessen Unterverzeichnisse) die Beschränkung gelten soll.

Zugriff von außen sperren

Manches Private sollte eher privat bleiben.
Auf einem Webserver, auf den man auch vom Internet aus Zugriff hat, soll die eine oder andere Unterseite nur aus dem internen Netzwerk aufrufbar sein.
Die .htaccess-Datei dafür sieht in etwa so aus:

order deny,allow
deny from all
allow from 172.17.0.0/255.255.0.0

Hiermit haben nur Benutzer aus dem internen Netzwerk Zugriff, die eine 172.17.*.*er-IP-Adresse haben.

Erweiterte Schwierigkeiten durch Proxy

Dies hatte in der Firma einige Weile funktioniert, bis irgendwas an Proxy/Firewall umgestellt wurde.
Seitdem haben Zugriffe von außerhalb des Unternehmens-Netzwerkes eine IP, die so aussieht, als ob sie von innerhalb des Netzwerkes kommen würde (z.B. 172.17.60.10, was oben genannte Regel durchlässt).

Um herauszufinden, an Hand von was man Zugriffe von außerhalb und Zugriffe von innerhalb des Intranets unterscheiden kann, habe ich mir ausspucken lassen, was die $_SERVER-Variable in einem php-Testskript so alles beinhaltet, wenn man von außen zugreift. Gemeinsamer Nenner war HTTP_VIA, in welchem die IP 192.168.248.5 stand, wenn der Zugriff von außen erfolgte (und ansonsten leer war).
Somit konnte ich mein Problem nun mit einer RewriteRule in der .htaccess-Datei lösen.

Weiterlesen...
 
Von PHP auf einem Ubuntu-Server auf eine MSSQL-Datenbank zugreifen

Aus der Kategorie "warum einfach, wenn's auch kompliziert geht" hatte ich versucht, irgendwie via ODBC von einem Ubuntu-Server auf eine MS-SQL-Datenbank zuzugreifen. Was man dazu im Internet an (verschiedenen!) Anleitungen findet, ist faszinierend.

Nach etwas Trial und ziemlich viel Error musste ich festellen, dass es auch ganz einfach geht und es kein ODBC benötigt, wenn ich von PHP aus auf eine MS-SQL-Datenbank zugreifen möchte.

Weiterlesen...
 
ZIP-Datei mit PHP erstellen

ZIP-Dateien lassen sich direkt mit PHP-Bordmitteln erstellen.

Im Folgenden ein paar Zeilen für "mein digitales Gedächtnis"...

Weiterlesen...
 
Bild auf Website beschneiden
Meine Intention: Auf einer Website soll man ein hochgeladenes Bild wie rechts abgebildet auf Wunsch beschneiden können. Das Resultat landet wieder als (neue) Bilddatei auf dem Webserver.

Die JavaScript-Funktionen, um den Beschneidungsbereich im Browser auswählen zu können, liefert hierbei die Bibliothek cropper.
Das beschnittene Bild wird dann im Hintergrund mit Hilfe von PHP erstellt (cropper bietet hier zwar eine direkte Lösung, allerdings muss der eingesetzte Browser hierfür HTMLCanvasElement.toBlob verstehen und das sind mir für meinen Geschmack zu wenige Browser, die das können).

Weiterlesen...
 
Graue Haare mit PHPs imagecopyresampled
Meine Intention: Auf einer Website soll man ein hochgeladenes Bild wie rechts abgebildet auf Wunsch beschneiden können. Das Resultat landet wieder als Bilddatei auf dem Webserver.

Die zwei Grundpfeiler der ganzen Geschichte sind zum einen die JavaScript-Bibliothek cropper und zum anderen der Befehl

 imagecopyresampled
der PHP-GD-Bibliothek.

Die PHP-API-Dokumentation ist für mich eigentlich das Top-Beispiel, wie eine Dokumentation aussehen müsste. Allerdings sind bei mir wohl durch die Beschreibung des Befehles

 imagecopyresampled
ein mehr an grauen Haaren hinzugekommen. Da waren auch die zahlreichen Codeschnipsel im unteren Teil der Seite keine Hilfe, bei denen immer gleich noch skaliert wurde.

Weiterlesen...
 
jQuery FileUpload

Das jQuery FileUpload-Plugin ist eine feine Sache, welches ich inzwischen fast immer verwende, wenn ich auf einer Website eine Upload-Möglichkeit hinzufügen muss.
Mit jQuery FileUpload sind Uploads großer und vieler Dateien keine große Sache. Das Plugin hat nur ein Manko: Zur Dokumentation lässt sich sagen "Ja, ist vorhanden". Aber gerade wegen der vielen Optionen und Möglichkeiten ist sie leider nicht so übersichtlich, wie ein

php.net
oder
api.jquery.com

So beschäftige ich mich immer wieder Stunden damit, eine Lösung zu finden, nur weil bei einer neuen Implementierung eine Kleinigkeit anders sein soll.

Ich will im Folgenden mal meine Best Pracices mit dem jQuery FileUpload-Plugin unter dem Gesichtspunkt "Verwendung mit PHP" zusammenfassen.

Weiterlesen...
 
phpMyAdmin: Ansicht editieren
Ein praktisches Feature von phpMyAdmin ist die Möglichkeit, "Ansichten" ("Views") zu generieren.
Eine Ansicht ist nichts anderes, als eine "Gespeicherte SQL-Abfrage". Führt man eine bestimmte Anfrage häufiger durch, so speichert man diese am besten als Ansicht und hat diese dann wie auch die eigentlichen Tabellen Datenbank-Baum griffbereit (im Beispiel rechts die Ansicht "falsche außen-sensorwerte").

Möchte man an so eine Ansicht allerdings einmal ändern, gestaltet sich das nicht so einfach, wie die Ansicht ursprünglich erstellt wurde.

Weiterlesen...
 
FPDF: Wie platziere ich Text?

All paar Monate greife ich mal wieder auf FPDF zurück und stolpere immer wieder über die etwas gewöhnungsbedürftigen Funktionen der Text-Platzierung.

In welcher Einheit sind die Einheiten? Welche zig Parameter muss ich der Methode übergeben und wie erstelle ich mehrzeiligen Text? Weiterlesen...
 
Meine JavaScript-AJAX-Funktion

Während eine statische HTML-Site angezeigt wird per JavaScript im Hintergrund Abfragen machen – die Möglichkeit bietet JavaScript schon seit Jahren.
Allerdings werden immer zahlreiche Zeilen Code nötig, den XMLHttpRequest() einzurichten und die Antwort entgegenzunehmen.

Ich selbst kopiere mir meine dafür verwendete Funktion immer wieder aus einem anderen Projekt raus und will es nun lieber mal hier in meiner Sammlung hilfreicher Web-Tipps posten.

Weiterlesen...
 
  Seite:  1 2 3 >> 34 Artikel insgesamt