Précédent   Forum des professionnels en informatique > PHP > Langage
Langage Forum sur le langage PHP, la POO, les conventions, la sécurité, etc. Avant de poster : FAQ Langage, toutes les FAQ PHP, cours langage et sources PHP
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 15/03/2011, 09h28   #1
Membre à l'essai
 
Inscription : février 2005
Messages : 127
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 127
Points : 22
Points : 22
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:

Citation:
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 :
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 !!
tissard est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/03/2011, 10h48   #2
Membre chevronné
 
Homme
Développeur Web
Inscription : mars 2011
Messages : 399
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur Web
Secteur : Finance

Informations forums :
Inscription : mars 2011
Messages : 399
Points : 662
Points : 662
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?)
Shikiryu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/03/2011, 16h22   #3
Membre à l'essai
 
Inscription : février 2005
Messages : 127
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 127
Points : 22
Points : 22
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 :
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.
tissard est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/03/2011, 11h53   #4
Membre chevronné
 
Homme
Développeur Web
Inscription : mars 2011
Messages : 399
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur Web
Secteur : Finance

Informations forums :
Inscription : mars 2011
Messages : 399
Points : 662
Points : 662
Je la modifierai un petit peu :

Code :
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 :
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.
Shikiryu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/03/2011, 08h26   #5
Membre à l'essai
 
Inscription : février 2005
Messages : 127
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 127
Points : 22
Points : 22
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 .... ??
tissard est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/03/2011, 11h07   #6
Membre chevronné
 
Homme
Développeur Web
Inscription : mars 2011
Messages : 399
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur Web
Secteur : Finance

Informations forums :
Inscription : mars 2011
Messages : 399
Points : 662
Points : 662
Alors, revenons à l'erreur du début maintenant que le code est bien séparé.

Citation:
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 :
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 :
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?
Shikiryu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/03/2011, 09h04   #7
Membre à l'essai
 
Inscription : février 2005
Messages : 127
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 127
Points : 22
Points : 22
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 ?
tissard est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 21h14.


 
 
 
 
Partenaires

Hébergement Web