AutorStableWeb

PHP-Codeschnipsel, die man immer mal wieder braucht

Datumsumwandlung ziwschen MySQL- und deutschem Format

MySQL nach deutsch

function date_mysql2german($date) {
if (strpos($date," ")===false) {
$datum=$date;
$zeit="";
} else {
list($datum,$zeit)=explode(" ",$date);
$zeit=" ".$zeit;
}
$teile = explode("-",$datum);
return sprintf("%02d.%02d.%04d", $teile[2], $teile[1], $teile[0]).$zeit;
}

Deutsch nach MySQL

function date_german2mysql($date) {
if (strpos($date," ")===false) {
$datum=$date;
$zeit="";
} else {
list($datum,$zeit)=explode(" ",$date);
$zeit=" ".$zeit;
}
$teile = explode(".",$date);
return sprintf("%04d-%02d-%02d", $teile[2], $teile[1], $teile[0]).$zeit;
}

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

Wie kann ich ein Python-Skript bspw. bei Domain Factory zur Ausgabe von Daten im Browser bewegen?

Während PHP-Skripte ohne Ausgabe von Headern, HTML-Gerüst oder sonstigen Tamm auskommen, verhält sich der Apache offensichtlich bei Python-Skripten etwas zickiger.

Ein Minimal-Skript, wie

läuft zwar wunderbar in der Shell, erzeugt aber, wenn es über die entsprechende URL aufgerufen wird, möglicher Weise einen Fehler 500.

Der Apache weiß also offensichtlich nicht, was er mit der Ausgabe machen soll und wie er sie behandeln soll.

Die Lösung ist relativ simpel:

sorgt dafür, dass auch der Aufruf im Browser klappt.

Wie kann ich eine WordPress-Installation möglichst schnell und elegant umziehen?

Neben der „klassischen“ Methode (Dateien einzeln per FTP herunterladen, DB-Backup per PHPMyAdmin erstellen) gibt es auch noch den etwas eleganteren Umweg über die Kommandozeile.

Oftmals hat man jedoch in einfacheren Hostingpaketen keinen Zugriff per Telnet oder SSH. Allerdings lassen sich fast immer trotzdem Systembefehle absetzen.

Diesen Umstand kann man sich für eine schnelle Erstellung von Backups von Code und DB zu nutze machen.

Backup DB:
system("mysqldump --opt -Q -h DB-ALT-HOST -u DB-ALT-USER -p DB-ALT-NAME --password=\"DB-ALT-PASSWORT\" > ./dbdump.sql",$ret);

Backup Code:
system("tar -zcf ./backup.tar.gz ./*",$ret);

Anschließend werden die beiden erzeugten Dateien per (S)FTP heruntergeladen und auf den neuen Server hochgeladen.

DB einspielen:
system("mysql -h DB-NEU-HOST -u DB-NEU-USER --password=\"DB-NEU-PASSWORT\" DB-NEU-NAME < ./dbdump.sql");

Code entpacken:
system("tar -xvzf ./backup.tar.gz ",$ret);

Anschließend müssen in der Datei „wp-config.php“ noch die neuen DB-Daten eingetragen werden.

Hinter den DB-Daten müssen dann noch die beiden Zeilen für die neue Domain eingetragen werden:
define('WP_SITEURL', 'http://www.neue-adresse.de');
define('WP_HOME', 'http://www.neue-adresse.de');

Weiterhin sollte noch folgende Zeile eigefügt werden:
define('RELOCATE', true);

Anschließend muss die Login-Seite aufgerufen werden:
http://www.neue-adresse.de/wp-login.php

Diese Zeile wird noch vor dem Ausfüllen des Login-Formulars wieder entfernt.

Im Dashboard dann ein Plugin, z.B. „Better Search and Replace“, installieren und die alten URLs in der Datenbank durch die neuen URLs ersetzen.

MYSQL Visualizer – Ein schlankes Tool, um Datenbankstrukturen zu visualisieren

Wer jemals versucht hat, eine fremde Datenbankstruktur zu verstehen – oder, noch schlimmer – ein altes Projekt revisionieren sollte, der kennt das Problem: Wie zum Teufel hängen diese verd… Tabellen zusammen?

Natürlich gibt es professionelle Lösungen, die wahlweise vieles können, aber nicht das, was man will, oder die ein Schweinegeld kosten.

Aber eigentlich will man doch nur kurz visualisieren, welche Tabellen es gibt und wie sie zusammenhängen.

Das kleine Tool MYSQL Visualizer tut genau das. Man kopiert es in ein Verzeichnis auf dem passenden Webspace, legt einen Verzeichnisschutz drauf und ruft es auf. Nach Eingabe der DB-Konnektivitätsdaten zieht das Tool die Daten der Tabellen und Felder und stellt diese grafisch dar.

Anschließend lassen sich unbedeutende Tabellen ausblenden, die vorhandenen Tabellen neu auf dem Workspace positionieren und zwischen den Felder Abhängigkeiten mittels Linien herstellen. Beim Verschieben der Tabellen auf dem Workspace werden selbstverständlich auch die Verknüpfungen aktualisiert.

Neue Tabellen und Felder lassen sich problemlos einlesen, ohne dass vorhandene Verknüpfungen verloren gehen.

In der aktuellen Beta-Version werden die Tabellenpositionen zwar noch nicht an geänderte Workspacegrößen angepasst, aber ansonsten läuft das Tool angenehm stabil und speichert alle Eingaben zuverlässig ab.

Mails per PHP von einer Synology Diskstation verschicken

mail() funktionert ja bekanntlich unter Synology DSM auf einer Diskstation nicht.

Relativ komfortabel kann man jedoch Mails mit dem PEAR-Mail-Paket via SMTP versenden.
Dazu sind folgende Schritte nötig:

  1. Über den Paketmanager PEAR installieren
  2. Per telnet oder ssh auf der Diskstation eine Konsole öffnen und abschicken
  3. Eine Mail per Mail verschicken:

Update für DSM6

Der PEAR-Pfad muss an zwei Stellen ergänzt werden:

1. Hauptmenü => WebStation => PHP-Einstellungen => Häkchen bei „PHP open_basedir benutzerspezifisch anpassen“ setzen und bei „opeb_basedir:“ am Ende :/volume1/@appstore/PEAR/ ergänzen

2. auf „Erweiterte Einstellungen“ klicken => Reiter „Kern“ anklicken => den Wert für „include_path“ auf „.:/volume1/@appstore/PEAR/“ anpassen und „OK“ klicken

Ggfls. muss der Webserver noch per SSH neu gestartet werden:
sudo synoservice --restart pkgctl-WebStation

WordPress per PHP direkt von wordpress.org als Zip-Datei auf Server herunterladen und entpacken

Um Prototypen für Kunden zu bauen oder auch für eigene Bastelprojekte muss ich immer mal wieder WordPress neu aufsetzen.

Bei vielen Hostern geht das heute auch als App oder Service relativ vollautomatisch, aber oftmals hat man dann nicht volle Schreibrechte in den WordPress-Verzeichnissen. Also installiere ich lieber selbst.

Da das Herunterladen auf den eigenen Rechner, das lokale Entpacken der Zip-Datei und der anschließende Upload der Daten relativ unspannend und zumindest im FTP-Transfer auch zeitaufwändig ist, lässt sich dieser Vorgang mit einem kleinen Skript weitestgehend automatisieren.

  1. aktuelle deutsche Version von WordPress als Zip-Datei mit cURL direkt auf den Server ziehen
  2. Zip-Datei entpacken
  3. Verzeichnisse und Dateien aus dem Unterordner „wordpress“ auf die aktuelle Verzeichnisebene verschieben
  4. WordPress-Installation anstoßen

Als Skript sieht das dann so aus:

Noch ein paar Worte zur Erläuterung:

  • Die Klasse ZipArchive sollte ab PHP 5.2 zur Verfügung stehen.
  • Das exec-Kommando kann bei anderen Hostern anders heißen, bspw. system etc.

 

Einfache Suchmuster mit RegExp für width und height

In älteren HTML-Dateien findet man gern noch fixe Angaben zu Höhen (height) und Breiten (width).

Um diese mit einem RegExp-fähigen Editor (bspw. Notepad++) zu suchen und ggfls. zu löschen oder zu ändern, helfen diese Suchbegriffe:

height=\"[0-9/. \-]*\"
width=\"[0-9/. \-]*\"
style=\"width\:[0-9/. \-]*px\;\"
style=\"height\:[0-9/. \-]*px\;\"

Pear Mail_Mime und das Encoding der Empfängeradresse (to) mit Umlauten – natürlich auch für weitere Header-Parameter

Gleichwohl man annehmen könnte, dass das Encoding von Umlauten heutzutage – zumindest, sofern man UTF-8 benutzt – selbstverständlich sein sollte, stößt man immer wieder mal Probleme.

Aktuell hatte ich ein kleines Skript, dass per PHP über Mail-Mime Multipart-Mails verschickt. Alles lief rund vier Wochen glatt, bis auf einmal eine Mail partout nicht rausgehen wollte. Stattdessen hat mir der Server freundlicher Weise einen 500er geworfen.

Wie sich nach eingehender Recherche herausstellte, lag es an der Empfängeradresse, welche ich in der Form „Vorname Nachname <email@domain.tld>“ übergab. Der Nachname enthielt nun leider ein ß. Soll ja vorkommen…

Google hin, google her, das Problem war zwar erkannt, wollte sich aber gar nicht so einfach lösen lassen. Ein Encoding über imap_8bit() brachte nicht den erwünschten Erfolg.

Im Endeffekt tat es dann folgende kleine Funktion:
function mb_mime_header($string, $encoding=null, $linefeed="\r\n") {
if(!$encoding) $encoding = mb_internal_encoding();
$encoded = '';
while($length = mb_strlen($string)) {
$encoded .= "=?$encoding?B?"
. base64_encode(mb_substr($string,0,24,$encoding))
. "?=$linefeed";
$string = mb_substr($string,24,$length,$encoding);
}
return $encoded;
}

welche ich folgendermaßen nutze

$to=mb_mime_header("Name der Empfängers","UTF-8")." <email@domain.tld>";

Wie kann ich in Corel Draw die Werkseinstellungen insbesondere auch das Monitorprofil zurücksetzen

Corel Draw zeigt gelegentlich Farben flasch an. Insbesondere erscheint das Weiß viel zu gelblich. Schuld daran scheint ein falsches Monitorprofil zu sein, welches sich aber einzeln nicht löschen lässen.

Die Lösung ist relativ simpel: Corel Draw schließen und neu starten und wenn der Splashscreen erscheint, die F8-Taste gedrückt halten, bis die Frage nach der Rückstellung auf die Werkseinstellungen aufpoppt.

Aber Achtung: Alle sonstigen Einstellungen an der Arbeitsumgebung gehen dabei ebenfalls verloren.

Dieser Tipp sollte mindestens bis Version X5 funktionieren.

© 2017 StableWeb / CMS-EDV

Theme von Anders Norén↑ ↑