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

Langage PHP Discussion :

Problème entre LDAP et mysql dans un même code PHP


Sujet :

Langage PHP

  1. #1
    Membre confirmé
    Inscrit en
    Février 2005
    Messages
    127
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 127
    Par défaut Problème entre LDAP et mysql dans un même code PHP
    Bonjour à tous,

    Voici mon soucis:

    j'exécute dans une page PHP une fonction qui me permet de récupérer dans l'Active Directory de mon serveur W2008 l'ensemble des PCs de mon parc informatique.

    Jusque là tout va bien !!!!
    C'est maintenant que ça se complique !!!

    JE voudrais dans cette page faire une requête MySQL pour récupérer dans ma base les PCs et faire une comparaison entre l'AD et ma base.

    Et là c'est le drame !!!

    Si je n'ai que la fonction ldap, tout est OK.
    Si je n'ai que la fonction vers ma base de données MySQL, tout est OK.
    Par contre que j'ai les 2, voici le message d'erreur qui apparît:

    Proxy Error
    The proxy server received an invalid response from an upstream server.
    The proxy server could not handle the request GET /appli/fnct_ldap.php.

    Reason: Error reading from remote server
    Voici le code dans ma page :
    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
    17
    18
    19
    20
    21
    22
    23
    require_once("class.php");
    $TEST = new TEST_BASE();
     
    $TEST->ds = ldap_connect("ldap://{$TEST->host}.{$TEST->domain}");  // On initialise la connexion au domaine (doit être un serveur LDAP valide !) 
    ldap_set_option($TEST->ds, LDAP_OPT_PROTOCOL_VERSION, 3); //Option à ajoutée si vous utiliser Windows server2k3 
    ldap_set_option($TEST->ds, LDAP_OPT_REFERRALS, 0); //Option à ajoutée si vous utiliser Windows server2k3 
    @ldap_bind($TEST->ds, "{$TEST->user}@{$TEST->domain}", $TEST->password) or die("Connexion impossible"); // connexion avec user et password 
     
    $TEST->search = ldap_search($TEST->ds, $TEST->dn, $TEST->filter); 
    $info_ldap = ldap_get_entries($TEST->ds, $TEST->search);*/
    ldap_unbind($TEST->ds);
    ldap_close($TEST->ds);
    // Connexion à la base de données MySQL
    $TEST->connexion_base();
    $sql = "SELECT * FROM ".$TEST->TPC." ORDER BY name_PC";
    $data=mysql_query($sql,$TEST->connexion) or die("La requête -<2>- n'a pu aboutir ");
    while($result=mysql_fetch_array($data))
    {
    	$values[]=$result; 
    }
     
    echo $nb_PC = count($values);
    $TEST->arret_base();
    A vous de jouer les enfants !!

  2. #2
    Membre émérite

    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2011
    Messages
    411
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 411
    Par défaut
    Il nous faudrait surtout le code de la classe TEST_BASE car c'est là dedans que tout se fait. Et à priori, c'est elle qui gère MySQL ET LDAP (Est-ce un bon choix?)

  3. #3
    Membre confirmé
    Inscrit en
    Février 2005
    Messages
    127
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 127
    Par défaut
    En fait j'ai trouvé ta remarque pas bête du coup j'ai déclaré une nouvelle classe que pour le LDAP.

    Voici la classe LDAP que j'ai créé.

    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    class TEST_LDAP{
    	/* Paramètres de connexion LDAP */
    	var $user = 'admin';
    	var $password = 'xxxxxx';
    	var $host = 'SERVEUR';
    	var $domain = 'DOMAIN.service.entreprise.fr';
    	var $group = 'Postes_PC';
    	var $ds = '';
    	var $search = '';
    	var $dn = 'OU=Postes_PC,DC=DOMAIN,DC=service,DC=entreprise,DC=fr';
    	var $filter = "(&(&(sAMAccountType=805306369)(objectCategory=computer)(objectClass=computer)(cn=*)))";
    	var $info_ldap = "";
     
    	function test_search_ldap_pmf()
    	{
    		$this->ds = ldap_connect("ldap://{$this->host}.{$this->domain}");  // On initialise la connexion au domaine (doit être un serveur LDAP valide !) 
    		ldap_set_option($this->ds, LDAP_OPT_PROTOCOL_VERSION, 3); //Option à ajoutée si vous utiliser Windows server2k3 
    		ldap_set_option($this->ds, LDAP_OPT_REFERRALS, 0); //Option à ajoutée si vous utiliser Windows server2k3 
    		@ldap_bind($this->ds, "{$this->user}@{$this->domain}", $this->password) or die("Connexion impossible"); // connexion avec user et password 
     
    		$this->search = ldap_search($this->ds, $this->dn, $this->filter); 
    		$this->info_ldap = ldap_get_entries($this->ds, $this->search);		
    		ldap_unbind($this->ds);
    		ldap_close($this->ds);
     
    	}
    } //FIN CLASS TEST_LDAP
    Cette fonction fonctionne correctement quand il n'y a pas de fonction MySQL.

  4. #4
    Membre émérite

    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2011
    Messages
    411
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 411
    Par défaut
    Je la modifierai un petit peu :

    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    class TEST_LDAP{
    	/* Paramètres de connexion LDAP */
    	private $user = 'admin';
    	private $password = 'xxxxxx';
    	private $host = 'SERVEUR';
    	private $domain = 'DOMAIN.service.entreprise.fr';
    	private $group = 'Postes_PC';
    	private $ds = '';
    	private $search = '';
    	private $dn = 'OU=Postes_PC,DC=DOMAIN,DC=service,DC=entreprise,DC=fr';
    	private $filter = "(&(&(sAMAccountType=805306369)(objectCategory=computer)(objectClass=computer)(cn=*)))";
    	private $info_ldap = "";
     
    	function test_search_ldap_pmf()
    	{
    		$this->ds = ldap_connect("ldap://{$this->host}.{$this->domain}");  // On initialise la connexion au domaine (doit être un serveur LDAP valide !) 
    		ldap_set_option($this->ds, LDAP_OPT_PROTOCOL_VERSION, 3); //Option à ajoutée si vous utiliser Windows server2k3 
    		ldap_set_option($this->ds, LDAP_OPT_REFERRALS, 0); //Option à ajoutée si vous utiliser Windows server2k3 
    		@ldap_bind($this->ds, "{$this->user}@{$this->domain}", $this->password) or die("Connexion impossible"); // connexion avec user et password 
     
    		$this->search = ldap_search($this->ds, $this->dn, $this->filter); 
    		$this->info_ldap = ldap_get_entries($this->ds, $this->search);		
    		ldap_unbind($this->ds);
    		ldap_close($this->ds);
     
    	}
            function getInfo(){
                   return $this->info_ldap;
            }
    } //FIN CLASS TEST_LDAP
    Puis dans le fichier appelant les 2 classes :

    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
    require_once("test_ldap.php");
    require_once("test_mysql.php");
    // On inclue les 2 classes
    $ldap = new TEST_LDAP; // on initialise la classe ds $ldap
    $ldap->test_search_ldap_pmf(); // on rempli toutes ses propriétés
    $info_ldap = $ldap->getInfo(); // on définit le retour dans $info_ldap
    if(!is_array($info_ldap)){ // si ldap_get_entries n'est pas un tableau, c'est que ça a foiré ;)
        echo "erreur ldap";
        exit;
    }
     
    $mysql = new TEST_MYSQL(...); // initialisation de la classe MYSQL (selon comment elle est faite)
    $info_mysql = $mysql->getInfo(); // resultat du tableau après while de mysql_query
     
    // là la comparaison entre les 2 arrays
    Comme je ne sais pas trop ce que donne comme tableau ldap_get_entries ni le resultat de ta requete mysql, je ne peux pas plus t'aider sur la comparaison.

  5. #5
    Membre confirmé
    Inscrit en
    Février 2005
    Messages
    127
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 127
    Par défaut
    Tout d'abord merci pour ton aide !!!!

    J'ai essayé ta solution, mais le résultat est le même.


    Il semble que les connexions ne se terminent pas comme il faut malgrè les fonctions ldap_close() et mysql_close() ....

    D'autres idées .... ??

  6. #6
    Membre émérite

    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2011
    Messages
    411
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 411
    Par défaut
    Alors, revenons à l'erreur du début maintenant que le code est bien séparé.

    Proxy Error
    The proxy server received an invalid response from an upstream server.
    The proxy server could not handle the request GET /appli/fnct_ldap.php.

    Reason: Error reading from remote server
    A priori, l'erreur vient de ta classe ldap. Il va donc falloir la passer en débuggage.
    Je ne connais pas trop le protocol LDAP et encore moins son interaction avec PHP... Mais je vais essayer grâce à la doc

    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    class TEST_LDAP{
    	/* Paramètres de connexion LDAP */
    	private $user = 'admin';
    	private $password = 'xxxxxx';
    	private $host = 'SERVEUR';
    	private $domain = 'DOMAIN.service.entreprise.fr';
    	private $group = 'Postes_PC';
    	private $ds = '';
    	private $search = '';
    	private $dn = 'OU=Postes_PC,DC=DOMAIN,DC=service,DC=entreprise,DC=fr';
    	private $filter = "(&(&(sAMAccountType=805306369)(objectCategory=computer)(objectClass=computer)(cn=*)))";
    	private $info_ldap = "";
     
    	function test_search_ldap_pmf()
    	{
    		$this->ds = ldap_connect("ldap://{$this->host}.$this->domain}");  
                    if($this->ds !== FALSE){ // là on vérifie si la connexion fonctionne
    		    ldap_set_option($this->ds, LDAP_OPT_PROTOCOL_VERSION, 3);
    		    ldap_set_option($this->ds, LDAP_OPT_REFERRALS, 0); 
    		    ldap_bind($this->ds, $this->user."@".$this->domain, $this->password);
     
    		    $this->search = ldap_search($this->ds, $this->dn, $this->filter); 
                        if($this->search !== FALSE)
    		                    $this->info_ldap = ldap_get_entries($this->ds, $this->search);	
                        else echo 'search failed!';	
    		    ldap_unbind($this->ds);
    		   //ldap_close($this->ds); inutile, c'est un alias de ldap_unbind
                        return true; // on rajoute un retour pour vérification
                    }
                    else echo 'connexion failed';
                    return false;	        
    	}
            function getInfo(){
                   return $this->info_ldap;
            }
    }
    Et dans l'autre fichier :

    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
    require_once("test_ldap.php");
    require_once("test_mysql.php");
    // On inclue les 2 classes
    $ldap = new TEST_LDAP; // on initialise la classe ds $ldap
    $ldap_connec = $ldap->test_search_ldap_pmf(); // on rempli toutes ses propriétés
    if(!ldap_connec) die('connexion ldap failed :('); // Ici on vérifie si ldap s'est bien passé.
    $info_ldap = $ldap->getInfo(); // on définit le retour dans $info_ldap
    if(!is_array($info_ldap)){ // si ldap_get_entries n'est pas un tableau, c'est que ça a foiré ;)
        echo "erreur ldap";
        exit;
    }
     
    $mysql = new TEST_MYSQL(...); // initialisation de la classe MYSQL (selon comment elle est faite)
    $info_mysql = $mysql->getInfo(); // resultat du tableau après while de mysql_query
     
    // là la comparaison entre les 2 arrays
    Avec ça quelles erreurs apparaissent?

  7. #7
    Membre confirmé
    Inscrit en
    Février 2005
    Messages
    127
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 127
    Par défaut
    Bonjour,

    Bon alors ...
    J'ai toujours la même erreur ...

    Lorsque je n'ai que la connexion LDAP dans ma page, tt est OK.
    Lorsque je n'ai que la connexion MySQL dans ma page, tt est OK.

    Je pense que la connexion LDAP a du mal à s'arrêter !!!

    Qu'en penses tu ?

Discussions similaires

  1. [2.x] [Symfony2]Problème Ajout de deux entités dans un même form
    Par the ing dans le forum Symfony
    Réponses: 1
    Dernier message: 14/12/2012, 17h48
  2. interconnexion entre ldap et mysql
    Par ageofempiresz dans le forum Applications et environnements graphiques
    Réponses: 2
    Dernier message: 19/07/2012, 21h28
  3. [MySQL] Recherche dans 2 tables MySql dans la même requete
    Par poitierjohan dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 10/03/2011, 19h59
  4. Problème de concaténation en pdf dans un même fichier
    Par laptitedede dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 13/07/2010, 18h10
  5. Problème avec filtre et insertion dans la même Table
    Par lepeule dans le forum Bases de données
    Réponses: 2
    Dernier message: 03/05/2010, 10h28

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