Connectix Boards

Bienvenue, vous n'êtes pas connecté. ( Se connecter - S'enregistrer )

Dernière version sortie: 0.8.4!
Venez tester la version 1.0 beta :)

Connectix Boards > Vous et votre forum Connectix Boards > Support > Erreur SQL suite à un rapatriement des données

RSS >  Erreur SQL suite à un rapatriement des données, rapatriement non conventionnel, de wamp vers lamp
Ishimaru Chiaki #16 03/08/2009 - 12h46

Groupe : Doc-rédacteur
Messages : 800
Enregistré le : 12/03/2008

Hors ligne Site Web

Je reviens sur le sujet initial (puisque je n'aurai pas mon ti-bar finalement...)

Finalement, j'ai regardé ça avec mathedit, un gars que j'ai connu sur support-phpbb2 où nous étions tous deux admins non-fondateurs jusqu'à il y a un mois et qui, tout comme moi, est sur Ubuntu et utilise un serveur LAMP pour tester en local, et il m'a déjà dépannée pour un problème d'installation de la librairie GD quelques mois auparavant.  Suite à nos échanges de MPs, ça se trouve qu'il semblerait que je sois en IPv6 et que CB semble ne pas le supporter.

Voici seulement la partie pertinente de l'échange de MPs.

mathedit a dit:

Bref, j'ai pas tout compris, je pense que le plus simple c'est de modifier Connectix (il est sous licence ?)

Que renvoie ceci :
<?php echo $_SERVER['SERVER_ADDR']; ?>
Chez moi ça retourne ... rien, c'est peut être ça le souci...



mathedit a dit:

mea culpa, chez moi ça marche, mais pas avec php-cli, c'est pour ça que j'avais pas vu ;)



moi a dit:

mathedit a dit:

Bref, j'ai pas tout compris, je pense que le plus simple c'est de modifier Connectix (il est sous licence ?)



Il est sous licence GPL, donc aucun problème.  Ce forum-ci est d'ailleurs modifié, avec des mods et fixes que j'ai codés.

mathedit a dit:

Que renvoie ceci :
<?php echo $_SERVER['SERVER_ADDR']; ?>
Chez moi ça retourne ... rien, c'est peut être ça le souci...



Ça me renvoie ceci :
::1



mathedit a dit:

Ishimaru Chiaki a dit:


Ça me renvoie ceci :
::1



Désolé pour le retard, j'étais en vacances et au retour j'avais oublié :D

Bon à priori tu es en IP6, cela peut expliquer le souci, le forum ne le prévoit peut être pas, ou alors fait un truc bizarre avec.
Malheureusement je pense pas pouvoir faire grand chose, à part modifier le forum, lIP v6 est un monde inconnu pour moi.  :wacko:




Donc, le code actuel de CB ne supporte bel et bien pas l'IPv6 ?  Si c'est ça, est-ce que le support de l'IPv6 est prévu pour la 1.0 ?

Merci d'avance.

Ishimaru
Ce message a été édité par Ishimaru Chiaki le 03/08/2009 à 12h54.
Besoin de volontaires pour les tests du support IPv6 dans la future version 0.8.5 !
Plus d'informations ici

Mon fil Twitter
Martin #17 03/08/2009 - 17h28

Groupe : Administrateur
Messages : 3657
Enregistré le : 01/02/2005

Hors ligne Site Web

On dirait qu'il va falloir le prévoir  :pirate:
Merci beaucoup pour ces précisions!
Posted Image
« Entre une mauvaise cuisinière et une empoisonneuse il n'y a qu'une différence d'intention. » - P. Desproges
Ishimaru Chiaki #18 04/08/2009 - 04h00

Groupe : Doc-rédacteur
Messages : 800
Enregistré le : 12/03/2008

Hors ligne Site Web

Je viens de trouver une piste pour pouvoir gérer l'IPv6 : http://us2.php.net/manual/en/function.ip2long.php#83548

EDIT : Yesss, la technique proposée marche !

EDIT2 : J'ai terminé ma chasse aux ip2long, voici les différentes modifications :

Dans include/lib/lib.cb.php

Avant
?>

Ajouter
/*Fonction qui traite l'Ip récupérée par $_SERVER['REMOTE_ADDR'], pour le support ipv4 et ipv6 */
function getIp($userip)
{
   $ip = htmlspecialchars($userip);
   if (strpos($ip, '::') === 0) {
       $ip = substr($ip, strrpos($ip, ':')+1);
   }
   $host = ip2long($ip);
   return $host;
}


(pour ce qui suit, on peut même utiliser la fonction rechercher-remplacer pour remplacer ip2long par getIp rapidement dans les 4 autres fichiers)

Dans include/core/class.users.php

Remplacer (ligne 74)
       $GLOBALS['cb_db']->query('REPLACE DELAYED INTO '.$GLOBALS['cb_db']->prefix.'connected(con_ip,con_id,con_timestamp,con_position) VALUES('.ip2long($_SERVER['REMOTE_ADDR']).','.$conid.','.time().',\''.$this->connected_position.'\')');

Par
       $GLOBALS['cb_db']->query('REPLACE DELAYED INTO '.$GLOBALS['cb_db']->prefix.'connected(con_ip,con_id,con_timestamp,con_position) VALUES('.getIp($_SERVER['REMOTE_ADDR']).','.$conid.','.time().',\''.$this->connected_position.'\')');

Dans common.php

Remplacer (ligne 133)
/* Si l'ip de l'utilisateur a été bannie... */
if (array_key_exists(ip2long($_SERVER['REMOTE_ADDR']),$GLOBALS['cb_cfg']->banned)) {
   if ($GLOBALS['cb_cfg']->banned[ip2long($_SERVER['REMOTE_ADDR'])] > time())
       trigger_error('Your ip has been banned from these forums. You can\'t connect here ! Please contact the administrators team.',E_USER_ERROR);
}


Par
/* Si l'ip de l'utilisateur a été bannie... */
if (array_key_exists(getIp($_SERVER['REMOTE_ADDR']),$GLOBALS['cb_cfg']->banned)) {
   if ($GLOBALS['cb_cfg']->banned[getIp($_SERVER['REMOTE_ADDR'])] > time())
       trigger_error('Your ip has been banned from these forums. You can\'t connect here ! Please contact the administrators team.',E_USER_ERROR);
}


Dans include/lib/lib.writing.php

Remplacer (ligne 69)
           $GLOBALS['cb_db']->query('INSERT INTO '.$GLOBALS['cb_db']->prefix.'messages (msg_topicid,msg_userid,msg_guest,msg_userip,msg_message,msg_timestamp,msg_modified,msg_modifieduser) VALUES('.$topicid.','.$writerid.','.$writername.','.ip2long($_SERVER['REMOTE_ADDR']).',\''.$msgcontents.'\','.$timestamp.',\'FALSE\',\'NULL\')');

Par
           $GLOBALS['cb_db']->query('INSERT INTO '.$GLOBALS['cb_db']->prefix.'messages (msg_topicid,msg_userid,msg_guest,msg_userip,msg_message,msg_timestamp,msg_modified,msg_modifieduser) VALUES('.$topicid.','.$writerid.','.$writername.','.getIp($_SERVER['REMOTE_ADDR']).',\''.$msgcontents.'\','.$timestamp.',\'FALSE\',\'NULL\')');

Remplacer (ligne 98)
           $GLOBALS['cb_db']->query('INSERT INTO '.$GLOBALS['cb_db']->prefix.'messages (msg_topicid,msg_userid,msg_guest,msg_userip,msg_message,msg_timestamp,msg_modified,msg_modifieduser) VALUES('.$wr_arr['towriteid'].','.$writerid.','.$writername.','.ip2long($_SERVER['REMOTE_ADDR']).',\''.$msgcontents.'\','.$timestamp.',\'FALSE\',\'NULL\')');

Par
           $GLOBALS['cb_db']->query('INSERT INTO '.$GLOBALS['cb_db']->prefix.'messages (msg_topicid,msg_userid,msg_guest,msg_userip,msg_message,msg_timestamp,msg_modified,msg_modifieduser) VALUES('.$wr_arr['towriteid'].','.$writerid.','.$writername.','.getIp($_SERVER['REMOTE_ADDR']).',\''.$msgcontents.'\','.$timestamp.',\'FALSE\',\'NULL\')');

Dans include/parts/part.register.php

Remplacer (ligne 47)
                                           if ($GLOBALS['cb_db']->single_result('SELECT 1 FROM '.$GLOBALS['cb_db']->prefix.'users WHERE usr_registertime>'.(time() - 3600).' AND usr_ip='.ip2long($_SERVER['REMOTE_ADDR'])) === false) {

Par
                                           if ($GLOBALS['cb_db']->single_result('SELECT 1 FROM '.$GLOBALS['cb_db']->prefix.'users WHERE usr_registertime>'.(time() - 3600).' AND usr_ip='.getIp($_SERVER['REMOTE_ADDR'])) === false) {

Remplacer (ligne 62)
                                                       $GLOBALS['cb_db']->query('INSERT INTO '.$GLOBALS['cb_db']->prefix.'users(usr_name,usr_password,usr_registered,usr_registertime,usr_email,usr_ip) VALUES(\''.clean($_POST['username']).'\',\''.cbHash($_POST['password1']).'\',\''.$registration.'\','.time().',\''.clean($_POST['email1']).'\','.ip2long($_SERVER['REMOTE_ADDR']).')');

Par
                                                       $GLOBALS['cb_db']->query('INSERT INTO '.$GLOBALS['cb_db']->prefix.'users(usr_name,usr_password,usr_registered,usr_registertime,usr_email,usr_ip) VALUES(\''.clean($_POST['username']).'\',\''.cbHash($_POST['password1']).'\',\''.$registration.'\','.time().',\''.clean($_POST['email1']).'\','.getIp($_SERVER['REMOTE_ADDR']).')');

Remplacer (ligne 69)
                                                   $GLOBALS['cb_db']->query('INSERT INTO '.$GLOBALS['cb_db']->prefix.'users(usr_name,usr_password,usr_registered,usr_registertime,usr_email,usr_ip) VALUES(\''.clean($_POST['username']).'\',\''.cbHash($_POST['password1']).'\',\'TRUE\','.time().',\''.clean($_POST['email1']).'\','.ip2long($_SERVER['REMOTE_ADDR']).')');

Par
                                                   $GLOBALS['cb_db']->query('INSERT INTO '.$GLOBALS['cb_db']->prefix.'users(usr_name,usr_password,usr_registered,usr_registertime,usr_email,usr_ip) VALUES(\''.clean($_POST['username']).'\',\''.cbHash($_POST['password1']).'\',\'TRUE\','.time().',\''.clean($_POST['email1']).'\','.getIp($_SERVER['REMOTE_ADDR']).')');

En faisant ces changements, la valeur n'est plus vide et donc, le fatal error a disparu et le forum est à nouveau accessible et fonctionnel, ce qui fait que je peux maintenant continuer mes tests en local !  Mais je n'ai pas encore testé sur l'un de mes forums de prod pour vérifier si tout est nickel avec l'ipv4
EDIT3 : Ça marche nickel sur le forum de prod !!!  Donc, ces modifications rendent bel et bien le forum à la fois compatible IPv4 et IPv6 !  À documenter pour mes co-linuxiens !

Là, pour que tu puisses tester, je ne sais pas si la dernière version de Wamp a implémenté le support d'Ipv6, puisque l'installation que j'ai sous XP date de fin 2007 et l'ip local est encore en ipv4.
Donc, ce qu'il te reste c'est d'avoir un serveur Apache/PHP/MySQL ayant ipv6 pour les tests.
Ce message a été édité par Ishimaru Chiaki le 04/08/2009 à 09h36.
Besoin de volontaires pour les tests du support IPv6 dans la future version 0.8.5 !
Plus d'informations ici

Mon fil Twitter
Martin #19 04/08/2009 - 09h40

Groupe : Administrateur
Messages : 3657
Enregistré le : 01/02/2005

Hors ligne Site Web

Merci pour ces précisions :rolleyes:
Tes informations me seront utiles.
Posted Image
« Entre une mauvaise cuisinière et une empoisonneuse il n'y a qu'une différence d'intention. » - P. Desproges
Ishimaru Chiaki #20 04/08/2009 - 09h48

Groupe : Doc-rédacteur
Messages : 800
Enregistré le : 12/03/2008

Hors ligne Site Web

Il faut remercier aussi mathedit qui m'a donné LA piste qui m'a permise d'en arriver à ce fix.

D'ailleurs, puisque d'autres Linuxiens pourraient se pointer ici et avoir le même problème que celui que j'ai eu, je viens de rédiger cette doc à leur intention :

SpoilerConnectix Boards et le support IPv6 sous GNU/Linux

Cette documentation s'adresse particulièrement à ceux qui n'arrivent pas à utiliser Connectix Boards en local en raison d'un message "Fatal Error" avec le code d'une requête de la table cb_connected lorsqu'ils arrivent sur l'index.

Ce problème vient du fait que par défaut, Connectix Boards ne supporte pas l'IPv6.  Or, les versions récentes de plusieurs distributions GNU/Linux, telles que Ubuntu 9.04, intègrent l'IPv6 par défaut dans le noyau Linux.

Ceci fait en sorte que la variable superglobale $_SERVER['REMOTE_ADDR'] retourne ceci comme adresse IP :
::1

au lieu de cela :
127.0.0.1

comme adresse IP locale

Connectix Boards utilisant la fonction ip2long() par défaut, ceci cause un plantage du script puisque ip2long() ne supporte que l'IPv4.

Vérifier si IPv6 est activé

Pour savoir si IPv6 est activé dans votre distribution GNU/Linux, il y a deux façons.

Méthode du fichier PHP

La première consiste à créer un nouveau fichier PHP sous votre éditeur de texte favori (ex: gedit) et insérez ce code dedans :
<?php echo $_SERVER['SERVER_ADDR']; ?>

Enregistrez-le en le nommant getip.php et en le plaçant à l'intérieur de votre répertoire où vous placez vos scripts.
Appelez ensuite l'URL du fichier (ex: http://localhost/www/getip.php) dans votre navigateur.

Si le script vous retourne ceci :
::1

au lieu de cela :
127.0.0.1

Alors l'IPv6 est activé.

Méthode de la ligne de commande

La deuxième méthode consiste à utiliser le terminal de votre distribution GNU/Linux pour récupérer les informations.

Dans un terminal, tapez cette commande :
ip a | grep inet6

Si IPv6 est activé, vous aurez une réponse sous cette forme :
inet6 ::1/128 scope host
 inet6 fe80::a00:27ff:fe21:8552/64 scope link


Autrement, rien ne s'affichera.


Que ce soit avec l'une ou avec l'autre méthode, si IPv6 est activé, suivez ce qui suit.

Rendre Connectix Boards compatible avec IPv6 à l'aide d'un MOD

Afin de corriger ce problème, un MOD a été mis au point par Ishimaru Chiaki, utilisatrice de GNU/Linux, afin de remplacer la fonction ip2long() par une fonction basés sur ce hack rapide qui supporte à la fois IPv4 et IPv6.  Le MOD a été testé à la fois sur un forum hébergé en local dans un environnement LAMP utilisant IPv6, et sur un autre forum hébergé en ligne, où les utilisateurs ont une adresse IPv4.

Pour les forums n'ayant eu aucune modification dans leur code PHP, vous n'avez qu'à télécharger l'archive .zip ou l'archive .tar.gz, à la décompresser et à écraser les cinq fichiers existants par les nouveaux fichiers contenus dans l'archive.

Pour les forums ayant déjà eu des modifications, référez-vous à ce lien pour les modifications manuelles des fichiers concernés par des modifications antérieures.
Besoin de volontaires pour les tests du support IPv6 dans la future version 0.8.5 !
Plus d'informations ici

Mon fil Twitter
neotelo #21 13/11/2010 - 17h30

Groupe : Nouveau
Messages : 6
Enregistré le : 08/05/2009

Hors ligne

Bonjour, je reviens un peu sur ce sujet avancé,
car j'obtiens un message d'erreur lors de l'installation de la board
en local avec MAMP et XAMPP.
         Posted Imageimagik.fr
Je suis sous macosXsnow, originalboard.
Quelles autres infos vous donnez?

*prend une bière et attend*

merci
Ishimaru Chiaki #22 13/11/2010 - 23h44

Groupe : Doc-rédacteur
Messages : 800
Enregistré le : 12/03/2008

Hors ligne Site Web

T'es en PHP 5.3 ?

Car j'ai ce même problème depuis que je suis passée à Ubuntu Lucid, qui utilise cette branche de PHP.  On dirait que la fonction que je proposais ne fonctionne plus à partir de PHP 5.3 et je ne sais pas pourquoi, n'ayant trouvé aucune des fonctions utilisées dans les fonctions dépréciées.

Voici la fonction modifiée que j'ai dû utiliser pour au moins faire passer l'IP locale :
function getIp($userip)
{
   $ip = htmlspecialchars($userip);
   if (strpos($ip, '::') === 0) {
       $ip = substr($ip, strrpos($ip, ':')+1);
   }
    if($userip == '::1')
    {
        $ip = '127.0.0.1';
    }
   $host = ip2long($ip);
   return $host;
}


Mais le hic, c'est que ce problème risque bientôt de déborder au delà des tests en local, car les IPv4 s'épuisent à vu d'oeil.
Besoin de volontaires pour les tests du support IPv6 dans la future version 0.8.5 !
Plus d'informations ici

Mon fil Twitter
neotelo #23 14/11/2010 - 16h55

Groupe : Nouveau
Messages : 6
Enregistré le : 08/05/2009

Hors ligne

Mes versions dans XAMPP:
Apache 2.2.14, MySQL 5.1.44, PHP 5.3.1, Perl 5.10.1, ProFTPD 1.3.3, phpMyAdmin 3.2.4, OpenSSL 0.9.8k...
bref la dernière version de xampp.
Pour ce qui est de la fonction modifiée, dans quel fichier se trouve t-elle?
Une autre solution pour travailler en local, si cela ne fonctionne pas?
Ishimaru Chiaki #24 14/11/2010 - 19h13

Groupe : Doc-rédacteur
Messages : 800
Enregistré le : 12/03/2008

Hors ligne Site Web

C'est dans include/lib/lib.cb.php que tu dois remplacer la fonction getIp actuelle par la nouvelle, si ton fichier est celui provenant du pack.  Si c'est le fichier d'orgine, tu ajoutes la fonction.
Besoin de volontaires pour les tests du support IPv6 dans la future version 0.8.5 !
Plus d'informations ici

Mon fil Twitter
neotelo #25 14/11/2010 - 22h05

Groupe : Nouveau
Messages : 6
Enregistré le : 08/05/2009

Hors ligne

For-mi-dable Ishimaru!!
Tu as résolu mon problème.
Je retourne à mon coda!!
merci.

 >  Réponse rapide

Composez votre message

Connectix Boards > Vous et votre forum Connectix Boards > Support > Erreur SQL suite à un rapatriement des données

 >  Informations du forum

1 personne(s) présente(s) durant une période de 15 minutes (0 membre(s) et 1 invité(s)).