Bonjour à tous !
Loïc m'ayant signalé un plantage de LazyDbBackup MySQLi chez O2switch en PHP 7, alors que les infos système du site montrent que MySQLi est bien activé, je me suis lancé dans des tests.
C'est la première fois qu'un tel incident m'est signalé, et j'ai pas mal de sites chez divers hébergeurs qui sont utilisateurs de cette version.
Donc chez O2switch en version 5.6 de PHP, aucun problème, la sauvegarde fonctionne.
Que ce soit en PHP 7.0, 7.1 ou 7.2, page blanche dès qu'on clique sur un des boutons de validation ou annulation du plugin. Cette page est blanche car y est inséré du code avec une classe masquant le contenu (et que je n'ai pu voir qu'avec Opera).
Sur mon site de test, ça enregistre bien une partie des données de la base, puis ça s'arrête sans affichage d'erreur. Le site utilisant Akeeba backup, ça semblait planter sur la partie "configuration" cryptée de la table ak_profiles. Après suppression de cette extension et de toutes les tables Akeeba, ça plante maintenant sur la première ligne de la table "assets".
Les deux dernières lignes de la sauvegardes sont :
L'analyse avec Jdump montre que le plantage se fait au niveau de la récupération du contenu et du type du champ "level" de cette table, dès la première ligne où il est à "0".
Jdump est en effet capable de me donner le type de champ et la valeur des champs précédents, mais manifestement la lecture de ce champ renvoie des infos qui plantent tout, la page du site restant blanche car attendant que la sauvegarde soit officiellement terminée.
La dernière information donnée par Jdump est que le dernier champ est "rgt", a pour valeur "139" et pour type "3". Rien sur le champ "level" qui suit.
Impossible de récupérer quelque information que ce soit qui puisse expliquer ce plantage. La partie de code où se produit l'erreur débute à la ligne 270 du fichier mysql_db_backup.php
La question est donc double : pourquoi ce plantage et pourquoi seulement sur toutes les versions 7 de PHP chez O2switch ?
N'arrivant pas à intercepter d'erreur, je ne vois pas comment la gérer. Un paramétrage particulier de PHP pourrait-il être en cause, mais alors pourquoi une partie de la sauvegarde se fait-elle correctement ?
Si quelqu'un a une idée de comment régler tout ça (en dehors de passer à la version PDO de LazyDbBackup qui, elle, fonctionne bien dans les mêmes conditions), je le remercie d'avance de ses conseils !
Robert
Loïc m'ayant signalé un plantage de LazyDbBackup MySQLi chez O2switch en PHP 7, alors que les infos système du site montrent que MySQLi est bien activé, je me suis lancé dans des tests.
C'est la première fois qu'un tel incident m'est signalé, et j'ai pas mal de sites chez divers hébergeurs qui sont utilisateurs de cette version.
Donc chez O2switch en version 5.6 de PHP, aucun problème, la sauvegarde fonctionne.
Que ce soit en PHP 7.0, 7.1 ou 7.2, page blanche dès qu'on clique sur un des boutons de validation ou annulation du plugin. Cette page est blanche car y est inséré du code avec une classe masquant le contenu (et que je n'ai pu voir qu'avec Opera).
Sur mon site de test, ça enregistre bien une partie des données de la base, puis ça s'arrête sans affichage d'erreur. Le site utilisant Akeeba backup, ça semblait planter sur la partie "configuration" cryptée de la table ak_profiles. Après suppression de cette extension et de toutes les tables Akeeba, ça plante maintenant sur la première ligne de la table "assets".
Les deux dernières lignes de la sauvegardes sont :
/*!40000 ALTER TABLE `qxnbu_assets` DISABLE KEYS */;
INSERT INTO `qxnbu_assets` (`id`,`parent_id`,`lft`,`rgt`,`level`,`name`,`titl e`,`rules`) VALUES
INSERT INTO `qxnbu_assets` (`id`,`parent_id`,`lft`,`rgt`,`level`,`name`,`titl e`,`rules`) VALUES
Jdump est en effet capable de me donner le type de champ et la valeur des champs précédents, mais manifestement la lecture de ce champ renvoie des infos qui plantent tout, la page du site restant blanche car attendant que la sauvegarde soit officiellement terminée.
La dernière information donnée par Jdump est que le dernier champ est "rgt", a pour valeur "139" et pour type "3". Rien sur le champ "level" qui suit.
Impossible de récupérer quelque information que ce soit qui puisse expliquer ce plantage. La partie de code où se produit l'erreur débute à la ligne 270 du fichier mysql_db_backup.php
Code PHP:
while($row=mysqli_fetch_row($result)){
if($fp){
$line=' (';
for($x=0;$x<$fields;$x++){
if($x)$line.=',';
if (!isset($row[$x])){
$line.='NULL';
}else{
if(mysqli_fetch_field_direct($result,$x)->type==3){
$line.=$row[$x];
}else{
$line.="'".mysqli_real_escape_string($this->link_id,$row[$x])."'";
}
//$line.=$row[$x];
}
}
N'arrivant pas à intercepter d'erreur, je ne vois pas comment la gérer. Un paramétrage particulier de PHP pourrait-il être en cause, mais alors pourquoi une partie de la sauvegarde se fait-elle correctement ?
Si quelqu'un a une idée de comment régler tout ça (en dehors de passer à la version PDO de LazyDbBackup qui, elle, fonctionne bien dans les mêmes conditions), je le remercie d'avance de ses conseils !
Robert
Commentaire