IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

BSD Discussion :

Problème de connexion mysql avec adodb sous Apache chrooté - OpenBSD


Sujet :

BSD

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20
    Points : 18
    Points
    18
    Par défaut Problème de connexion mysql avec adodb sous Apache chrooté - OpenBSD
    Système: OpenBSD 4.9
    Packages installés: php5-core-5.2.17, php5-extensions-5.2.17, php5-gd-5.2.17, php5-mysql-5.2.17, php5-snmp-5.2.17, mysql-server-5.1.54p3, mysql-client-5.1.54p0

    Bonjour,

    J'ai un script de tests placé dans /var/www/htdocs avec /var/www le chroot d'Apache.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    <?php
    include('../adodb5/adodb.inc.php');
    $conn = &ADONewConnection('mysql');
    $conn->PConnect('localhost','cacti','cactipw','cactidb');
    $sql = 'select hostname,description from host;';
    $recordSet = &$conn->Execute($sql);
    if (!$recordSet)
            print $conn->ErrorMsg();
    else
    while (!$recordSet->EOF) {
            print $recordSet->fields[0].' '.$recordSet->fields[1].'<BR>';
            $recordSet->MoveNext();
    }
    $recordSet->Close();
    $conn->Close();
    ?>
    J'ai aussi téléchargé adodb5 que j'ai placé dans /var/www

    Mon serveur mysql est lancé par la commande suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    # /usr/local/bin/mysqld_safe --user=_mysql --pid-file=/var/mysql/mysql.pid &
    Et j'ai configuré /etc/my.cnf (avec / non chrooté)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    [mysqld]
    socket          = /var/www/var/run/mysql/mysql.sock
    Lorsque mon serveur mysqld est démarré, il crée mysql.sock dans /var/www/var/run/mysql
    # ls -l /var/www/var/run/mysql/
    srwxrwxrwx 6 _mysql daemon 0 Oct 4 23:04 mysql.sock
    J'ai fais un lien pour que mysql.sock soit aussi joignable dans /var/run/mysql/
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    # ln /var/www/var/run/mysql/mysql.sock /var/run/mysql/mysql.sock

    Cas 1: Le script est executé hors de toute considération chroot => FONCTIONNE
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    # /usr/local/bin/php /var/www/htdocs/adotest.php
    127.0.0.1 System1<BR>1.1.1.1 System2<BR>

    Cas 2: Le script est executé en http par l'intermédiare d'Apache (qui est chrooté) url http://localhost/adotest.php => FONCTIONNE
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    127.0.0.1 System1
    1.1.1.1 System2
    Case 3: Le script est executé en ligne de commande et simule un utilisateur dans le chroot d'Apache => ECHOUE
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    # /usr/sbin/chroot /var/www /bin/php /htdocs/adotest.php
    PHP Fatal error:  Call to undefined function mysql_pconnect() in /adodb5/drivers/adodb-mysql.inc.php on line 383
    Fatal error: Call to undefined function mysql_pconnect() in /adodb5/drivers/adodb-mysql.inc.php on line 383
    Vous remarquerez que le script adotest.php est parvenu à inclure /adodb5/drivers/adodb-mysql.inc.php

    J'ai aussi copié /etc/my.cnf dans /var/www/etc mais changé le chemin pour le client mysql
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    [client]
    socket         = /var/run/mysql/mysql.sock
    J'ai pensé qu'il y avait un problème de connexion mysql, j'ai donc copié le client mysql dans le chroot (/var/www/bin) ainsi que les librairies dynamiques qui lui sont liées. Et la connexion fonctionne bien !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    # /bin/mysql -u cacti -p
    Enter password:
    Welcome to the MySQL monitor.  Commands end with ; or \g.
    Your MySQL connection id is 6

    Je ne comprends absolument pas pourquoi dans Cas 3 la connexion vers mysql ne s'effectue pas.
    Comme vous pouvez l'imaginer j'ai énormément cherché

    Merci

  2. #2
    Invité
    Invité(e)
    Par défaut
    Salut,

    A mon avis le problème est lié au fait que la librairie mysql.so n'est pas accessible.


    Pourrais-tu créer un phpinfo pour voir le chemin des libraires (extension_dir)

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20
    Points : 18
    Points
    18
    Par défaut
    Merci pour ta réponse. Voici le chemin

    Directive Local Value Master Value
    extension_dir /var/www/lib/php/modules /var/www/lib/php/modules
    # ls /var/www/lib/php/modules
    gd.so mysql.so snmp.so

  4. #4
    Invité
    Invité(e)
    Par défaut
    Ok

    Si tu chroot /var/www cela veut dire que /var/www deviendra la racine. donc logiquement l'extension_dir devrait être /lib/php/modules

    Peux-modifier temporairement modifer l'extension_dir dans le php.ini, redémarrer apache, vérifier que la nouvelle valeur soit bien prise en compte dans phpinfo() et voir ce que ça donne en ligne de commande?

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20
    Points : 18
    Points
    18
    Par défaut
    Excuse moi mais tu n'as pas du tout compris.

    Le Cas 2 décrit dans mon message d'origine montre bien que le couple Apache+php effectue bien la requête mysql.

    Ce qui ne fonctionne pas c'est un utilisateur chrooté dans /var/www qui exécute le script en php (sans passer par la couche Apache): Cas 3.

    C'est pas un problème simple...

    Merci

  6. #6
    Invité
    Invité(e)
    Par défaut
    Salut,

    Oui je comprends bien ton problème.

    l'erreur que tu vois indique clairement qu'il ne trouve pas les fonctions php pour pour pouvoir se connecter à mysql.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     strings /usr/lib/php5/20090626+lfs/mysql.so | grep mysql_pconnect
    mysql_pconnect
    Ces fonctions sont localisées dans la librairies mysql.so qui est localisé dans /var/www/lib/php/modules. ce ne semblant pas être accessible lorsque tu changes de racine.


    chroot /var/www => / donc /var/www/lib/modules/php/modules devient /lib/modules/php/modules


    Donc si tu veux accéder à une librairie qui se trouve dans le path /var/www/lib/php, tu devrais recréer la structure /var/www/var/www/lib/php/modules et copier mysql.so ainsi que ses dépendances dans /var/www pour que cette librairie puisse être retrouvée.

    Dans mon cas, pour que la librairies mysql.so soit accessible en ayant /var/www comme racine

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    ldd /usr/lib/php5/20090626+lfs/mysql.so
            linux-gate.so.1 =>  (0x00652000)
            libmysqlclient_r.so.16 => /usr/lib/libmysqlclient_r.so.16 (0x00a6e000)
            libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0x00141000)
            libpthread.so.0 => /lib/tls/i686/cmov/libpthread.so.0 (0x00989000)
            libcrypt.so.1 => /lib/tls/i686/cmov/libcrypt.so.1 (0x009ad000)
            libnsl.so.1 => /lib/tls/i686/cmov/libnsl.so.1 (0x00ddd000)
            libm.so.6 => /lib/tls/i686/cmov/libm.so.6 (0x0029b000)
            libz.so.1 => /lib/libz.so.1 (0x00e1e000)
            /lib/ld-linux.so.2 (0x00ca6000)
    Je devrais créer les repertoires /var/www/lib,/var/www/usr/lib/ (pour les dépendances et /var/www/usr/lib/php5(mysql.so) et copier les différentes librairies dans les chemins indiqués

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20
    Points : 18
    Points
    18
    Par défaut
    Salut,

    Tout d'abord merci pour ton aide.

    J'avais précédemment copié mon php.ini dans /var/www/etc/php et j'ai modifié le chemin pour extension_dir
    extension_dir = "/lib/php/modules"
    Et ajouté la ligne suivante
    extension=mysql.so

    J'ai donc à présent vu du système non chrooté
    # ls /var/www/lib/php/modules/
    gd.so mysql.so snmp.so
    En principe lorsqu'un script php est exécuté il va tenter de lire le php.ini

    ...

    En écrivant ce message, j'ai refait plein de tests et hourra !!! hip hip hip hourra ! le script fonctionne.

    Maintenant, reste plus qu'à faire fonctionner cacti.

    Donc merci pour ton aide.
    Pour la petite histoire, j'ai passé un nombre impressionnant de jours à faire ce debugging, isoler quel était le problème avec Cacti, voir que c'était adodb...

  8. #8
    Invité
    Invité(e)
    Par défaut
    Oki parfait.

    N'oublie pas le tag résolu dans ce cas

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. connexion mysql avec c# sous application windows 8
    Par Amine TDI dans le forum ADO.NET
    Réponses: 1
    Dernier message: 14/05/2013, 14h53
  2. [Lazarus] Problème de connexion Mysql avec Zeos
    Par Jon Shannow dans le forum Lazarus
    Réponses: 2
    Dernier message: 22/10/2012, 12h29
  3. [MySQL] Problème de connexion MySQL avec script PHP
    Par alen22 dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 04/08/2012, 10h42
  4. [dreamweaver] problème de connexion Mysql avec dreamweaver
    Par goma771 dans le forum Dreamweaver
    Réponses: 4
    Dernier message: 30/01/2006, 14h14
  5. Problème de connexion à PhpMyAdmin avec mySQL 5.0.18
    Par RVI dans le forum Installation
    Réponses: 5
    Dernier message: 27/01/2006, 12h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo