AutorStableWeb

Windows 10 Vorschaubilder für SVG-Dateien im Windows Explorer anzeigen

Windows unterstützt unschöner Weise traditionell keine Vorschau für SVG-Dateien.

Abhilfe schaft eine kleine Erweiterung namens SVG Viewer Extension for Windows Explorer, welche sich auf GitHub findet.

Die Erweiterung liegt als Release für Windows 32-bit und Windows 64-bit vor.

Wichtig ist, dass der Windows Explorer nach der Installation über den Task Manager ein Mal neu gestartet werden muss, damit die Erweiterung funktioniert. Ansonsten würde sie erst nach dem nächsten Neustart von Windows laufen.

Wie kann ich in der .htaccess dafür sorgen, dass meine Website nur unter einer Domain und SSL-verschlüsselt läuft

Domains sind spottbillig. Oftmals hat man diverse davon, die auf die gleiche Website zeigen (sollen).

Die Gründe dafür können vielfältig sein, z.B. möchte man alle Schreibweisen seiner Domain oder seines Firmennamens abdecken oder man hat irgendwann die Domain gewechselt und die alte gibt es noch.

Und selbstverständlich möchte man heutzutage sicher gehen, dass die eigene Website SSL-verschlüsselt, also über https ausgeliefert wird.

Diese Aufgabenstellung lässt sich relativ einfach über die .htaccess-Datei lösen, sofern mod_rewrite verfügbar ist:

Zu beachten ist eigentlich nur, dass in der Rewrite-Bedingung (RewriteCond) die Punkte im Domainnamen maskiert werden müssen.

Wie kann ich aus einem WordPress-Plugin heraus auf eine andere Datenbank zugreifen

Gelegentlich möchte man auf eine andere Datenbank zugreifen als auf die, auf der WordPress läuft.

Glücklicherweise kann man sehr leicht eine neue Instanz von wpdb anlegen:

WordPress WPDB (wp-db.php) public functions

public function init_charset()

public function determine_charset( $charset, $collate )

public function set_charset( $dbh, $charset = null, $collate = null )

public function set_sql_mode( $modes = array() )

public function set_prefix( $prefix, $set_table_names = true )

public function set_blog_id( $blog_id, $network_id = 0 )

public function get_blog_prefix( $blog_id = null )

public function tables( $scope = ‘all’, $prefix = true, $blog_id = 0 )

public function select( $db, $dbh = null )

public function _escape( $data )

public function escape_by_ref( &$string )

public function prepare( $query, $args )

public function esc_like( $text )

public function print_error( $str = ” )

public function show_errors( $show = true )

public function hide_errors()

public function suppress_errors( $suppress = true )

public function flush()

public function db_connect( $allow_bail = true )

public function parse_db_host( $host )

public function check_connection( $allow_bail = true )

public function query( $query )

public function placeholder_escape()

public function add_placeholder_escape( $query )

public function remove_placeholder_escape( $query )

public function insert( $table, $data, $format = null ) {

public function replace( $table, $data, $format = null )

public function update( $table, $data, $where, $format = null, $where_format = null )

public function delete( $table, $where, $where_format = null )

public function get_var( $query = null, $x = 0, $y = 0 )

public function get_row( $query = null, $output = OBJECT, $y = 0 )

public function get_col( $query = null , $x = 0 )

public function get_results( $query = null, $output = OBJECT )

public function get_col_charset( $table, $column )

public function get_col_length( $table, $column )

public function strip_invalid_text_for_column( $table, $column, $value )

public function get_col_info( $info_type = ‘name’, $col_offset = -1 )

public function timer_start()

public function timer_stop()

public function bail( $message, $error_code = ‘500’ )

public function close()

public function check_database_version()

public function supports_collation()

public function get_charset_collate()

public function has_cap( $db_cap )

public function get_caller()

public function db_version()

 

$wpdb->insert funktioniert nicht ohne erkennbaren Grund

Die Insert-Funktion der WordPress-eigenen Datenbankklasse ist bekanntermaßen sehr nützlich.
Allerdings gibt es eine wenig dokumentierte Einschränkung, welche einen an den Rand der Verzweiflung treiben kann.

Sofern man nämlich bspw. an ein als VARCHAR definiertes Feld mit einem String über die $wpdb->insert-Funktion füllen möchte, darf dieser String nicht länger als sein, als in der MySQL-Tabelle definiert. Ansonsten tut WordPress nämlich einfach gar nichts; keine Fehlermeldung, keine last_query, niente!

Zu allgemein? Wenn ich ein Feld “plz” mit VARCHAR(5) definiert habe und über $wpdb->insert “123456” zu schreiben versuche, passiert einfach gar nichts.

Nun kann man natürlich danach schreien, dass man doch alle Daten vor dem Schreiben validieren muss, aber MySQL selbst hat sich da gar nicht so. MySQL schneidet den String einfach ab und gut ist. Ein Insert über $wpdb->query funktionert natürlich, da es ja nur ein Wrapper für eine MySQL-Abfrage ist.

Wie kann man bei DomainFactory auf die Datenbank in einem anderen Auftrag per PHP zugreifen?

Bei vielen Hostern kann man auf alle Datenbanken des Hosters, so man die Zugangsdaten hat, zugreifen. Bei einigen Hostern kann man sogar externen Zugriff auf die Datenbanken gestatten.
Bei DomainFactory geht das leider nicht ohne Weiteres. Auch wenn eine Konfigurierbarkeit der Zugriffsmöglichkeiten wünschenswert wäre, muss man doch auf die etwas unhandliche Variante des SSH-Tunnels zurückgreifen.

Sofern man auf der Konsole per SSH arbeitet, ist das nicht weiter schwierig. Auf Server A einfach

eingeben, dass passende Kennwort für den SSH-Benutzer auf Server B eingeben und fertig.

Wenn man jetzt auch gleich noch den Datenbankzugriff auf eine MySql5-DB auf Server B haben möchte, sieht das dann so aus:

Anschließend lässt sich über den Host 127.0.0.1 auf Port 3307 auf die Datenbanken auf Server B zugreifen.

Wenn man nun das Ganze in PHP abbilden möchte, lernt man schnell, dass man zwar mit shell_exec() die SSH-Verbindung anstoßen kann, aber eben nicht das Kennwort übergeben kann.

Die Lösung ist eigentlich ganz einfach. Man generiert entsprechende Schlüssel und anschließend funktioniert der Zugriff ohne Eingabe eines Kennwortes.

Folgendes ist zu tun.

Auf Server A (von dem aus auf Server B zugegriffen werden soll) auf der Konsole:

eingeben und alle Abfragen mit [RETURN] bestätigen.
Es werden dann im Verzeichnis .ssh zwei Dateien abgelegt. Der private Schlüssel id_rsa und der öffentliche Schlüssel id_rsa.pub.

Die Datei id_rsa.pub muss anschließend auf den Server B in das Verzeichnis .ssh kopiert werden und anschließend in authorized_keys umbenannt werden. Sollte die Datei authorized_keys schon bestehen, so ist die id_rsa.pub mit der authorized_keys zu konkatenieren.
Anschließend muss das Verzeichnis .ssh noch auf die Rechte 0700 und die Datei authorized_keys auf die Rechte 0600 gesetzt werden.

Ein Test auf der Konsole von Server A mit

sollte nunmehr eine SSH-Vergbindung mit Server B ohne Rückfrage nach einem Passwort aufbauen.

Sofern das alles funktioniert, kann man nunmehr per PHP den SSH-Tunnel aufbauen und sich dann mit der Datenbank verbinden:

Das “2>&1” kann man weglassen. Es sorgt lediglich dafür, dass in Verbindung mit der Option -v die Ausgaben der Konsole tatsächlich zurückgegeben werden.
Bei der mysqli-Verbindung muss zwingend 127.0.0.1 statt localhost angegeben werden, da ansonsten versucht wird, eine Socket-Verbindung statt einer Verbindung über Port 3307 aufzubauen, was natürlich nicht funktioniert.

Wie lassen sich in WordPress Medien aus der Mediathek in einem Plugin auswählen bzw. einfügen?

Einbinden der Skripte:

Ausschnitt aus einem tabellarischen Formular (PHP):

Passender JavaScript-Code (jQuery)

SMB-1-Protokoll unter Windows 10 aktivieren oder deaktivieren

Wer noch ein älteres NAS besitzt, für das keine Updates mehr zur Verfügung gestellt werden, kann beim Versuch, sich mit diesem zu verbinden, unter Windows 10 eine freundliche Fehlermeldung erhalten, dass das SMB-1-Protokoll nicht mehr unterstützt wird.

Abhilfe ist relativ einfach:

  • Powershell als Admin starten
  • Enable-WindowsOptionalFeature -Online -FeatureName smb1protocol [RETURN]
  • Die Frage nach einem Neustart mit [Y] gefolgt von [RETURN] bestätigen

Wenn man den Zugriff nicht mehr benötigt, sollte man das SMB-1-Protokoll im Zweifel wieder deaktivieren:

  • Powershell als Admin starten
  • Disable-WindowsOptionalFeature -Online -FeatureName smb1protocol [RETURN]
  • Die Frage nach einem Neustart mit [Y] gefolgt von [RETURN] bestätigen

PHP-Codeschnipsel, die man immer mal wieder braucht

Datumsumwandlung ziwschen MySQL- und deutschem Format

MySQL nach deutsch

Deutsch nach MySQL

Wie kann ich Typo3 6.2 auf einen neuen Server umziehen?

In aller Kürze:

  • DB-Dump auf altem Server erstellen
  • DB-Dump auf neuem Server einspielen
  • Code-Backup auf altem Server stellen
  • Code-Backup auf neuem Server einspielen
  • DB-Konfiguration in /typo3conf/LocalConfiguration.php anpassen
  • Leere Datei “ENABLE_INSTALL_TOOL” in /typo3conf anlegen

Möglicherweise sind die benötigten Symlinks beim Übertragen den Codes verloren gegangen. Die lassen sich durch
ln -s ./typo3_src-6 typo3_src
ln -s typo3_src/typo3 typo3
ln -s typo3_src/index.php index.php

wieder herstellen. Ggfls. ist noch der _ vor .htaccess zu entfernen.

  • das Installtool (http://www.example.com/typo3/install/) aufrufen
  • Cache leeren und prüfen, ob es sonst noch Probleme gibt und diese ggfls. beheben
  • Fenster mit Installtool schließen
  • Leere Datei “ENABLE_INSTALL_TOOL” in /typo3conf löschen
  • Ggfls. Typo3-Backend (http://www.example.com/typo3/) aufrufen und baseURL anpassen
  • Falls nur die Startseite und keine Unterseiten erreichbar sind, die .htaccess aus /typo3_src/ ins Doc-Root-Verzeichnis verschieben