WordPress 4.3 casse la mise à jour via SSH/SFTP

Si vous avez un WordPress installé dans un hébergement sécurisé, vous utilisez probablement la mise à jour via SSH/SFTP pour effectuer les mises à jour. Seulement depuis WordPress 4.3 ce n’est plus possible à cause d’un bug introduit.

La mise à jour a échoué : La mise à jour ne peut pas être installée parce que nous n’allons pas pouvoir copier certains fichiers. Ce problème est généralement dû à des incohérences dans les permissions de fichiers.

Les développeurs de WordPress ont ajouté dans la version 4.3 une vérification, qui ne se comporte pas comme il faut, apparemment lié au support SSH/SFTP de PHP.

Les développeurs ont déjà réfléchi à une solution, et proposent un workaround.

Pour appliquer ce workaround, télécharger le fichier suivant, et patcher le code de votre WordPress avec. Voici un exemple en ligne de commande.

$ cd /home/monsite/www/wp-admin/includes/
$ wget "https://core.trac.wordpress.org/changeset/33688/trunk/src/wp-admin/includes/class-wp-filesystem-ssh2.php?format=diff&new=33688" -O /tmp/WP_ssh.patch
$ patch -p4 < /tmp/WP_ssh.patch

Vous pouvez aussi éditer le fichier « wp-admin/includes/class-wp-filesystem-ssh2.php », commentez/supprimez les lignes 386 et 387, et ajoutez en dessous « return true ».

public function is_writable($file) {
    //$file = ltrim($file, '/');
    //return is_writable('ssh2.sftp://' . $this->sftp_link . '/' . $file);
    return true;
 }

Vous devriez maintenant pouvoir mettre à jour vos plugins/thèmes.
Le problème sera corrigé avec la version 4.3.1.

Et en 4.8, il semblerait que ça soit une autre fonctionnalité qui soit cassé.
Pour la corriger, appliquer ce patch.


--- a/wp-admin/includes/class-wp-filesystem-ssh2.php
+++ b/wp-admin/includes/class-wp-filesystem-ssh2.php
@@ -185,7 +185,7 @@
if ( '/' === $path ) {
$path = '/./';
}
- return 'ssh2.sftp://' . $this->sftp_link . '/' . ltrim( $path, '/' );
+ return 'ssh2.sftp://' . intval($this->sftp_link) . '/' . ltrim( $path, '/' );
}

/**