Das Putzlowitsch Test- und SEO-Blog

Das neue WordPress 2.8

Diesmal habe ich nicht lange gefackelt und bereits zwei Tage nach dem Erscheinen der neuen WordPressversion 2.8 die 2.8er DE-Ausgabe gezogen und installiert. Bei 2.7 hatte ich ja erst die 2.7.1 abgewartet und nach den Problemen die aich da hatte, kann mich nichts mehr abschrecken :-)

Hat hier auch alles reibungslos funktioniert. Ich habe zunächst meine Schnurpsel-Seite in den Wartungsmodus versetzt, was ja seit WP 2.7 auch ohne Plugin funktioniert. Dann habe ich die Datenbank gesichert, das neue WP 2.8 komplett in ein neues Verzeichnis (blog_28) kopiert, mein spezielles Kopierskript angeworfen, welches mir alle individuellen Dateien (Plugins, Theme, Uploads, Config) aus der laufenden Installation in die neue kopiert und dann nur noch die Verzeichnisse auf meinem Webspeicherplatz umbenannt (blog -> blog_271 und blog_28 -> blog). Nun mußte ich nur noch den Wartungsmodus deaktivieren, die Datenbank durch Aufruf der upgrade.php auf den neusten Stand bringen und alles war gegessen. So einfach ist das :-)
Alle Plugins und das Theme scheinen erstmal fehlerfrei zu laufen.

Allerdings hatte die DE-Version 2.8 eine kleinen Fehler im Default-Theme. Das wäre mir beim Update ja nicht aufgefallen, aber da ich demnächst ein neues Webprojekt starte, habe ich dafür ein frische WP 2.8 installiert und da ich dort eine angepaßte Installation ohne diesen ersten Artikel, Kommentar und Seite verwende, trat der Fehler dann auf. Er wurde aber bereits kurz nach meiner Meldung im WP-Deutschland-Forum behoben.

Bei Putzlowitsch warte ich erstmal noch etwas, bis ich sicher bin, daß wirklich alles problemlos funktioniert, vielleicht stelle ich dann erst wieder mit der 2.8.1 um, mal sehen, mal gucken, mal schauen.

Ein Kommentar »

Das Ende der WordPress-Hacker

Wordpress 2.8 - Einstellungen > VerschiedenesFällt Euch bei dem Bild hier links (anklicken zum Vergrößern) etwas auf? Es zeigt die Einstellungs-Seite für „Verschiedenes“ der neuen WordPress-Version 2.8. Diese kann man sich vorab schon herunterladen und testen. Darauf gestoßen bin ich beim WordPress-Deutschland Blog im Artikel „WordPress 2.8 Feature Freeze„. Und da dachte ich mir so, schau ich mir die neue Vorabversion von WordPress 2.8 doch schon mal an. Auf den ersten Blick und nach dem Durchklicken aller Menüpunkte im Adminbereich (Backend) habe ich so auf die Schnelle keine wesentlichen Änderungen entdecken können.

Nur gaaaanz unten, auf der letzten Einstellungsseite „Verschiedenes“ traf mich fast der Schock. Die Option

[x] Die veraltete my-hacks.php-Datei unterstützen

ist verschwunde. Ein schwerer Schlag ins Kontor, für mich als bekennenden Fan der my-hacks.php-Datei.
Nachtrag: Hier findet man, warum es dazu kam.

Gut, wenn man die Option nicht mehr im Backend einstellen kann heißt das ja noch nicht unbedingt, daß sie nicht mehr vorhanden ist. Und tatsächlich, die Option ‚hack_file‘ gibt es noch immer und die my-hacks.php wird in wp-settings.php auch noch geladen, sofern die Option aktiv ist. Allerdings ist die von mir getestete Version von WordPress 2.8 eine noch recht frühe Version, also nicht Beta oder gar RC. Wenn alles schief läuft, fliegt die Unterstützung für die my-hacks.php doch noch ganz raus, was ich sehr bedauern würde.

Vielleicht überlebt sie aber doch noch im Hintergrund und für diesen Fall habe ich schnell ein kleines Plugin geschrieben, welches die Option wieder auf der Einstellungsseite „Verschiedenes“ zum Leben erweckt läßt :-)

Download: Plugin 123 Hackfile Option 0.12

Weitere Artikel mit Bezug zu diesem:
2 Kommentare »

WordPress 2.7 – Wartungsmodus ohne Plugin

Seit WordPress 2.7.x gibt es die Möglichkeit, WordPress selbst aus dem Backend (Admin-Bereich) heraus zu aktualisieren. Damit während des Aktualisierungsprozesses, der je nach Umfang länger dauern kann und möglicherweise eine Datenbankaktualisierung erforderlich macht, auf Grund inkonsistenter Zustände keine Fehler auftreten, versetzt WP sich selbst in einen Wartungsmodus. Der Nutzer, der das Blog aufruft, bekommt einen kurzen Hinweis angezeigt, daß gerade eine Wartung läuft und die Seite bald wieder verfügbar ist.

Diesen Maintenance-Modus kann man ganz ohne WP-Coreupdate auch manuell aktivieren. Vielleicht sind ja irgendwelche Abeiten an der Datenbank erforderlich oder man möchte das Blog aus anderen Gründen vorübergehend vom Netz nehmen.

So funktionierts

WordPress legt beim Start des Aktualisierungsprozesses einfach im WP-Wurzelverzeichnis eine Datei .maintenance an. In der Datei steht nur eine Zeile PHP-Code drin, in welchem die Variable $upgrading mit der Funtion time() den Startzeitpunktes fest zugewiesen bekommt. Nach erfolgreichem Update wird diese Datei einfach wieder gelöscht. Sollte was schief laufen und die Datei ist nach 10 Minuten ab Start immer noch da, wird der Maintenance-Modus beendet und der Admin erhält im Backend einen entsprechenden Hinweis angezeigt.

Um WordPress direkt in den Wartungsmodus zu versetzen, reicht es also, eine Datei mit folgendem Inhalt in das WordPress-Wurzelverzeichnis zu kopieren:

<?php $upgrading = time(); ?>

Am einfachsten ist es, diese maintenance.txt-Datei per FTP in das WordPress-Wurzelverzeichnis zu kopieren und dort in .maintenance umzubenennen.
Das war es schon, ab sofort gibt die Seite nur noch diese Meldung aus:

Die Seite ist ganz kurz nicht erreichbar. In einer Minute sollte wieder alles klappen.

Auch das Backend ist nicht erreichbar, man kann sich also nicht anmelden noch sonst etwas im Adminbereich machen.
Um den Wartungsmodus zu beenden, muß man einfach die Datei .maintenance löschen oder z.B. wieder in maintenance.txt umbenennen.

Wartungsmodus mit Adminzugriff

Nun möchte man aber vielleicht trotz Wartungsmodus auf den Adminbereich zugreifen. Dafür muß man die .maintenance-Datei dahingehend erweitern, daß überprüft wird, ob Seiten aus dem Adminberich oder die wp-login.php aufgerufen wurden. Ich habe das wie folgte realisiert:

<?php
$url_parts = parse_url( $_SERVER['REQUEST_URI'] );
$path_parts = pathinfo( $url_parts['path'] );
$dir_parts = explode( "/", $path_parts['dirname'] );
$dirname = end($dir_parts);
$filename = $path_parts['basename'];

$is_admin =	'wp-admin'==$dirname || 'wp-admin'==$filename;
$is_login =	'wp-login.php'==$filename;

if( $is_admin || $is_login )
	unset( $upgrading );
else
	$upgrading = time();
?>

Download: maintenance admin

Auch hier einfach die ZIP-Datei entpacken, die enthaltene Datei maintenance_admin.txt per FTP in das WP-Wurzelverzeichnis kopieren und in .maintenance umbenennen.

Nun wird beim Aufruf des Blogs der Wartungshinweis angezeigt, man kann sich aber im Backend anmelden und dort alles machen, was sich innerhalb des Admin-Breiches abspielt. Demzufolge funktionieren z.B. aber die Artikelvorschau und die Themevorschau nicht.

Es ist natürlich möglich, weitere Bedingungen zu prüfen und die Zugriffsmöglichkeiten zu erweitern. Man muß aber beachten, das innerhalb der .maintenance-Datei kein Zugriff auf irgendwelche WordPress-Funktionen besteht und man weitestgehend mit dem auskommen muß, was PHP zur Verfügung stellt. So kann man nicht etwa die Anmeldung mit den Nutzerdaten überprüfen, wohl aber das vorhandensein des Anmelde-Cookies.

Wartungsmeldung anpassen

Wem die schlichte Meldung nicht gefällt, die WordPress im Wartungsmodus ausgibt, kann auch hier selbst Hand anlegen. Dazu prüft WordPress, ob es im wp-content-Verzeichnis eine Datei maintenance.php gibt und wenn ja, wird diese anstelle der Standardmeldung geladen und ausgeführt.

Als Beispiel habe ich den Code aus der wp-settings.php genommen und leicht angepaßt:

<?php
	$retry = 120;
	$protocol = $_SERVER["SERVER_PROTOCOL"];
	if ( 'HTTP/1.1' != $protocol && 'HTTP/1.0' != $protocol )
		$protocol = 'HTTP/1.0';
	header( "$protocol 503 Service Unavailable", true, 503 );
	header( 'Content-Type: text/html; charset=utf-8' );
	header( "Retry-After: $retry" );
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
	<title>Wartungsarbeiten</title>
</head>
<body>
	<h1>Wartungsarbeiten</h1>
	<p>Die Seite ist für kurze Zeit nicht erreichbar. In ein paar Minute sollte wieder alles klappen.</p>
</body>
</html>

Download: maintenance.zip
Die ZIP-Datei entpacken, die enthaltene Datei maintenance.php gegebenfalls nach eigenen Wünschen anpassen und per FTP in das wp-content-Verzeichnis kopieren.

Wichtig ist das korrekte Setzen vom HTTP-Status im Antwort-Header. Für Wartungsarbeiten oder sonstige, zeitweilige Ausfälle sieht HTTP den Status 503 vor. Zudem sollte auch ein Wert für Retry-After gesetzt werden. Ich habe da jetzt 120 Sekunden genommen, es kann aber auch ein konkreter Zeitpunkt eingetragen werde, zu dem das Blog voraussichtlich wieder verfügbar ist.

Nach dem PHP-Block kann man seiner Phantasie HTML-technisch freien Lauf lassen. Aber auch hier gilt, man hat keinen Zugriff auf irgendwelche WordPress-Funktionen.

Fazit

Seit WordPress 2.7 ist es mit einfachen Hausmitteln ohne Plugin möglich, das Blog in einen Wartungsmodus zu versetzen, um Zugriffe während Arbeiten am System oder der Datenbank zu unterbinden. Optional kann auch der Zugriff auf das Backend (wp-admin) gewähleistet werden.

Vorteil dieser einfachen Lösung ist es, daß sie bereits greift, bevor WP selbst geladen wird und auch bevor irgendwelche Zugriffe auf die Datenbank erfolgen. Kleiner Nachteil ist, daß innerhalb der .maintenance-Datei und der optionalen Meldungsseite maintenance.php kein Zugriff auf WordPressfunktionen besteht.

7 Kommentare »

Sicher ist sicher – Datenbanksicherung bei Strato

Datenbank-Sicherung

Regelmäßige Datensicherungen sind das Bloggers erste Bürgerpflicht, besonders vor einem Update auf eine neue WordPress-Version. Bei Strato gibt es dafür eine über den Kundenbereich erreichbare Version von phpMyAdmin. Diese habe ich bisher auch ohne Probleme genutzt, auch wenn sie bisweilen etwas träge daherkam.

Strato phpMyAdmin 2.6.4-pl3

Vor dem Update auf WordPress 2.7 habe ich natürlich auch erstmal eine Datenbanksicherung gemacht, zum Herunterladen wähle ich gewohnheitsmäßig die Option „GZip-komprimiert“. Die Datei ’schnurpsel_251_create.sql.gz‘ wurde gespeichert, alles in Ordnung, dachte ich, dann kann es mit dem Update ja losgehen.

Das Update auf WP 2.7 lief zunächst erstmal ohne Probleme, ich konnte mich in Adminbereich anmelden, das Blog selbst sah auf gut aus. Doch dann plötzlich gibt es beim Speichern eines neuen Artikels einen bösen Fehler 500, mit das schlimmste, was so passieren kann. Der Server hat da ein schwerwiegendes Problem. Nachdem ich zunächst nur einen kurzen Schwächeanfall des Servers oder der Datenbank vermutete wurde es aber leider nicht besser. Auch das Blog selbst meldete nur noch den 500er.

Sollte WordPress 2.7 etwa die Fehlerursache sein? Na gut, ist auch kein Beinbruch, ich hatte ja meine Kopie vom alten WordPress, also einfach die Verzeichnisse wieder umbenennen, die Datenbanktabellen löschen und die Datenbanksicherung zurückspielen. Doch was ist das? Da fehlen Tabellen, die Liste hört irgendwo bei ‚wp_posts‘ auf, da kommen doch eigentlich noch die Tag/Kategorie-Sachen (wp_term*) und die User-Tabellen (wp_user*). Hat beim Datenimport was nicht geklappt?
Die Datenbank-Sicherung ist praktisch eine Textdatei mit SQL-Anweisungen, also ganz normal als Text lesbar. Sie wird nur mit GZip gepackt. Beim Doppelklick auf die Datei meldet mir 7Zip jedoch nur:

7-Zip Archiverror

Das Problem

Ein Blick in die .sql.gz-Datei offenbarte dann das Dilemma, die Daten dort sind überhaupt nicht gepackt, sie stehen da als lesbare SQL-Anweisungen drin, und was noch viel schlimmer ist, die Daten sind direkt nach dem Artikel mit der ID 27 zu Ende, da kommt nichts mehr, EOF.
Dann fiel mir das „Strato Backup-Control“ ein, da werden regelmäßg meine Daten gesichert auf die ich dann über eine spezielles FTP-Login zugreifen kann. Vielleicht gibt es da auch eine Datenbank-Sicherung. Nein, ist leider nichts von Datenbanken zu finden, die Sicherung betrifft nur die Dateien im Webspace.

Das bestätigt mir telefonisch auch ein Support-Mitarbeiter von Strato, der mir dann aber gleich noch zu einem Upgrade auf das Paket „PowerPlus L“ (€ 14,90 im Monat) rät, da wäre dann auch ein Datenbank-Backup enthalten.

Dumm gelaufen, würde ich sagen. So habe ich halt meine letzte Sicherung vom April 2008 eingespielt und da ich in der Zwischenzeit hier nicht besonders aktiv war einfach die verlorengegangenen Artikel per Hand (aus dem Google-Cache) nachgetragen.

Aber was war passiert, hatte ich mich einfach nur zu blöd angestellt, mit phpMyAdmin eine Sicherung zu machen? Nun wollte ich der Sache auf den Grund gehen.
Also habe ich die unterschiedlichen Varianten bei der Sicherung durchgespielt, einmal unkomprimiert, dann Zip und auch GZip. Bei unkomprimiert und Zip ist alles in Ordnung, nur bei GZip tritt der Fehler reproduzierbar auf. Die Daten werden nicht komprimiert und fatalerweise irgendwann einfach abgeschnitten.

Also rufe ich nochmal beim Strato Support an und schildere meine Beobachtung. Der Supportmitarbeiter kann nach meiner Anweisung das Problem sogar reproduzieren, hat aber auch keine Erklärung dafür und gibt es per Service-Ticket an die Technik weiter. Die Antwort kommt ein paar Tage später per E-Mail:

Sie haben berichtet, dass Datenbanken über die MYSQL-Datenbankverwaltung nicht komprimiert werden können.
Wir haben diesen Sachverhalt geprüft und konnten keine Beeinträchtigung feststellen. Die Datenbank DBXXYYZZ wird gzip komprimiert als *gz Archiv mit 196KB (entpackt 894KB) angeboten…
Eventuell wird die Übertragung clientseitig angebrochen.

Langsam kamen mir Zweifel, habe ich doch etwa selbst irgendeinen Fehler gemacht? Oder ist mein Anliegen bei der Technikabteilung nicht richtig angekommen? Also rufe ich zum dritten mal an und werde schließlich zur Technik weiterverbunden.
Nach einigem hin und her fragt mich der Techniker, was ich denn eigentlich wolle. Wenn ich meine Daten sichern will, würde das schließlich funktionieren, halt nur unkomprimiert und mit Zip, und das GZip nicht funktioniert sei eher mein Problem. Der „WebDatabase Manager“ sei ohnehin nur eine Zugabe und nicht Vertragsbestandteil. Er rät mir sogar für die Datenbanksicherung selber entsprechende Tools zu installieren, etwa mySQLDumper. Egal, es hilft ja nicht weiter, sich zu streiten, nach 20 Minuten war das Gepräch beendet.

Im übrigen wird mit dem „WebDatabase Manager“ (phpMyAdmin) als „Strato Profi Feature“ geworben, dann sollte sowas auch richtig und vor allem zuverlässig funktionieren. Und auch die Tatsache, das der Datenexport mit Zip-Komprimierung funktioniert, hilft nicht wirklich weiter, denn beim Datenimport wird Zip nicht unterstützt.

Die Ursache

Irgendeinen Grund muß es ja haben, das bei mir, und auch beim zweiten Support-Mitarbeiter die GZip-komprimierung fehlschlägt. Mehr durch Zufall bin ich dann drauf gestoßen, denn überraschenderweise trat genau das Problem auch bei meiner lokalen phpMyAdmin-Installation auf, die noch eine relativ alte 2.6er Version war (2.6.3, bei Strato immer noch 2.6.4).

Sollte es doch irgendwie am Client, sprich Browser, liegen? Also probierte ich die GZip-Sicherung mal testweise mit dem Internet-Explorer und siehe da, alles ist bestens. Hmmm, eigentlich hatte das immer auch mit dem Firefox funktioniert, warum denn nun auf einmal nicht mehr? Könnte es am neuen Firefox 3 liegen, lange Zeit noch hatte ich den 2er in Benutzung. Die Vermutung bestätigt sich nach einem kurzen Test, auch mit dem Firefox 2.x gibt es keine Probleme, eine ordentliche GZip-Datei wird gespeichert.

Der Rest ist dann schnell ermittelt, es gibt tatsächlich eine Problem mit phpMyAdmin und dem Firefox der 3er Reihe im Zusammenhang mit GZip, welches vermutlich bei allen phpMyAdmin-Versionen bis Version 2.11.6 auftritt und mit Version 2.11.7 gefixt wurde.

Und was kann Strato nun dafür? Ganz einfach, die haben da einen mehr als drei Jahre alten phpMyAdmin zu laufen, auf den sich der Kunde möglicherweise verläßt. Dabei schreibt Strato in den FAQ zu phpMyAdmin sogar unter Anmerkung, daß man regelmäßig, etwas einmal jährlich, Updates bereitstellen will:

Evtl. auftretende Sicherheitsrisiken oder bekannte Bugs in phpMyAdmin werden von uns selbstverständlich sofort entfernt.
Updates oder Versionsänderungen werden voraussichtlich einmal im Jahr durchgeführt.

Im übrigen sieht es bei 1&1 bezüglich der Datenbanksicherung auch nicht besser aus, dort läuft ebenfalls noch die alte phpMyAdmin-Version 2.6.4-pl3 als „MySQL-Control-Center“ und auch dort funktioniert der Export mit GZip-Komprimierung nicht. Immerhin gibt es bei 1und1 noch eine funktionierende BZip-Kompression, die man dann sogar wieder importieren kann.

Keine Probleme gibt es hingegen bei All-Inkl, da läuft phpMyAdmin in der Version 2.11.7 und Host-Europe mit dem der fast ganz akuellen 2.11.9.1er Version.

Fazit

Zunächst muß ich mir an die eigene Nase fassen, denn man sollte grundsätzlich überprüfen, ob die Datenbanksicherung auch tatsächlich lesbar ist. Nur darauf zu vertrauen, das alles geklappt hat, wenn die Datei auf dem eigenen Rechner liegt, reicht nicht.

Andererseits muß ich die Nutzer von Shared-Webhosting-Paketen bei Strato und 1und1 davor warnen, auf die vorinstallierten Datenbanktools der Anbieter zu vertrauen. Die derzeit dort laufende phpMyAdmin-Version 2.6.4-pl3 ist mehr als drei Jahre alt und hat reproduzierbare Fehler, die zu Datenverlusten führen können.
Man sollte sich entweder selbst eine aktuelle phpMyAdmin-Version installieren oder auch andere Werkzeuge zur Datenbanksicherung, wie mySQLDumper, verwenden.

13 Kommentare »

WordPress 2.5 – Shortcode und die Bildergalerie

Neue Features

In WordPress ab Version 2.5 wurde die Attachment-Verwaltung erheblich erweitert und verbessert. Sie firmiert nun unter dem Schlagwort Mediathek. Eine wesentliche Erleichterung ist meiner Meinung nach die Möglichkeit, mehrere Dateien (z.B. Bilder) auswählen und in einem Rutsch hochladen zu können. Ein weiteres Highlight sind die sogenannten Shortcodes, kleine Textbausteine, die bei der Ausgabe in viele schöne Sachen verwandelt werden können. Die Shortcodes sin aber eher etwas für Plugin-Entwickler, der normale Nutzer hat erstmal nichts davon.
Einen solchen Shortcode liefert WordPress aber bereits mit, es ist eine einfache Bilder-Galerie.

Die Worpress-Bildergalerie

Aus Anwendersicht ist das mit den Shortcodes ganz einfach, man fügt das gewünschte Kürzel, gegebenfalls mit Parametern, einfach in eckigen Klammern an der Stelle im Text ein, wo die Ausgabe erfolgen soll. Für die WP-Bildergalerie sieht das z.B. so aus:

[gallery columns='2']

Bei der Anzeige das Artikels wird dann dieser Shortcode z.B. durch eine Bildergalerie ersetzt:

So könnte es aussehen. Die Ausgabe läßt sich durch ein paar Parameter steuern, so legt der Parameter ‚columns‘ z.B. fest, wieviele Spalten die Galerie verwenden soll (Standardwert ist 3). Im Beispiel habe ich 2 Spalten eingestellt.
Alle Parameter und die Verwendung des Gallery-Shortcodes sind im WP-Codex beschrieben.

Erweiterung – Der Link

Eine wie ich meine wichtige Sache haben die Entwickler aber vergessen. In der Standard-Galerie wird vom Vorschaubild immer auf die Bilderseite (Beispiel Bild 1) verlinkt, nicht auf das Bild selbst. Das ist so im PHP-Quelltext fest „verdrahtet“. Dabei wäre es kein großes Sache gewesen auch dafür einen Parameter vorzusehen. Aber was nicht ist, kann man glücklicherweise mit einem Plugin nachrüsten. So habe ich einfach die originale gallery_shortcode-Funktion genommen und um den Parameter attlink erweitert. Das Plugin selbst und eine Kurze Beschreibung findet man auf meiner Plugin-Seite „123 Extended Gallery„.

Und noch etwas habe ich verändert. Im Originalcode wird der CSS-Teil zur Formatierung der Galerie direkt in den Artikel geschrieben. Das ist alles andere als HTML-konform. So habe ich den CSS-Teil rausgezogen und in den Header verlegt, dahin wo soetwas hingehört. Einziger kleiner Nachteil, die CSS-Sachen werden immer im Header ausgegeben, auch wenn später im Artikel gar keine Galerie vorhanden ist. Aber damit kann ich leben.

Ein Kommentar »