Werden z.B. innerhalb einer Schleife verschiedene Elemente mit Hilfe eines regulären Ausdrucks ausgewertet, so werden im Falle eines Nicht-Treffers die Treffer-Variablen nicht zurückgesetzt.
use strict;
use warnings;
my @albums = (
'The Phantom Agony',
'Design Your Universe',
'The Holographic Principle'
);
foreach my $album (@albums) {
$album =~ /(Universe)/;
if (defined $1) { print "match: $1 -> '$album'\n"; }
}
Auf den ersten Blick wäre zu erwarten, daß lediglich eine Zeile als Ergebnis ausgegeben wird, tatsächlich sind dies aber zwei:
match: Universe -> 'Design Your Universe'
match: Universe -> 'The Holographic Principle'
Die Ursache liegt in der überhaupt nicht durchgeführten Überprüfung des Ergebnisses des regulären Ausdrucks, die korrekt so aussehen muss:
use strict;
use warnings;
my @albums = (
'The Phantom Agony',
'Design Your Universe',
'The Holographic Principle'
);
foreach my $album (@albums) {
if ($album =~ /(Universe)/) {
print "match: $1 -> '$album'\n"; }
}
Dann erscheint auch - wie ursprünglich erwartet - als Ergebnis nur eine Zeile:
match: Universe -> 'Design Your Universe'
Notiz an mich selbst: eine korrekte Behandlung von Abfrageergebnissen erspart eine aufwendige Fehlersuche.
Bei einer Aktualiserung schaltet WordPress die Website automatisch in den Wartungsmodus, ein Mechanismus, den man auch für manuelle Wartungen aktivieren kann.
Zum Aktivieren wird eine Datei “.maintenance” mit folgendem Inhalt im Hauptverzeichnis der WordPress-Installation angelegt, welche den Wartungsmodus bis zum Entfernen (oder Umbenennen der Datei) aktiviert.
<?php $upgrading = time(); >
Die Erklärung der Funktionsweise findet sich im WordPress-Quellcode innerhalb der Datei load.php
...
303 function wp_is_maintenance_mode() {
304 global $upgrading;
305
306 if ( ! file_exists( ABSPATH . '.maintenance' ) || wp_installing() ) {
307 return false;
308 }
309
310 require ABSPATH . '.maintenance';
311 // If the $upgrading timestamp is older than 10 minutes, consider maintenance over.
312 if ( ( time() - $upgrading ) >= 10 * MINUTE_IN_SECONDS ) {
313 return false;
314 }
...
Im ersten Schritt wird das Vorhandensein einer Datei “.maintenance” im Hauptverzeichnis der WordPress-Installation geprüft. Ist diese vorhanden, so wird vom aktuellen Zeitstempel der Wert der Variablen “$upgrading” subtrahiert. Ist der Rest größer oder gleich 10 Minuten, so wird der Wartungsmodus deaktiviert.
Durch das Setzen der Variable “$upgrading” auf den aktuellen Zeitstempel bleibt die Differenz immer 0, die 10 Minuten werden nie überschritten und der Wartungsmodus kann manuell gesteuert werden.

