PHP- und Drupal-Bug: Update von Drupal7-Modulen bricht mit Fehlermeldung ab

PHP- und Drupal-Bug: Update von Drupal7-Modulen bricht mit Fehlermeldung ab

Das ein Softwarefehler in einem Programm dafür sorgt, dass ein anderes Programm nicht mehr läuft, kommt schon mal vor. Aber dieser Fall ist besonders kurios. Hier heben sich zwei Fehler gegenseitig auf und das Beseitigen des einen sorgt dafür, dass der andere zum Tragen kommt.

Aber der Reihe. Angefangen hat das ganze heute morgen, als ich in einer Drupal7-Installation (7.18) diverse Module updaten wollte. Normalerweise geht das mit Drupal7 ja sehr einfach und komfortabel direkt aus dem Backend heraus. Diesesmal aber nicht. Mitten im Update kam plötzlich die Fehlermeldung

    Error installing / updating
    File Transfer failed, reason: Cannot remove directory /usr/www/users/xxxxxx/sites/all/modules/views/drush/...

und damit brach das Update ab. Die Vermutung, dass die Rechte der Ordner fehlerhaft sind, stellte sich schnell als falsch raus. Wie alle unsere Drupal-Installationen hatten die Ordner die korrekten Rechte 755 und gehörten auch dem richtigen FTP-User.

Nach kurzer Recherche auf drupal.org fand sich dann hier die Lösung. Die Ursache ist ein Bug in Drupals Klasse "SkipDotsRecursiveDirectoryIterator". Dieser hatte sich bisher nicht ausgewirkt, weil die Seite bis vor kurzem noch mit PHP 5.3.21 lief. Und diese PHP-Version hatte ihrerseits einen Bug, der verhinderte, dass der Fehler in Drupal zur Wirkung kam. Nach dem kürzlich erfolgten Update auf PHP 5.3.23, in der der Fehler behoben worden war, kam nun der Drupal-Bug zur Geltung und verhinderte das Update von Modulen via Backend. Die Lösung des Problems ist einfach: entweder man macht ein Update auf die neueste Drupal7-Version (zur Zeit 7.22) oder man schaltet auf eine ältere PHP-Version zurück (vor 5.3.23 oder auch PHP5.2).