WernerK: Ldap_connect wenn Server nicht erreichbar

Hallo,
im Manual steht:
 resource ldap_connect ([ string $hostname [, int $port ]] )

Rückgabewert: Eine positive Verbindungs-Kennung im Erfolgsfall, FALSE im Fehlerfall.

Wenn ich einen ldap_connect versuche auf einen Server bzw. IP der nicht erreichbar ist bekomme ich kein False zurück sondern eine Ressource ID #14
$ad = ldap_connect($ldaphost, $port);
echo "der connect ist $ad <br>";

Wie kann man prüfen ob ein Server erreichbar ist oder nicht?

Gruss
Werner

  1. Tach!

    im Manual steht:
    resource ldap_connect ([ string $hostname [, int $port ]] )
    Rückgabewert: Eine positive Verbindungs-Kennung im Erfolgsfall, FALSE im Fehlerfall.

    Nimm das englische Original, da steht noch ein Satz mehr zum Rückgabewert, und der könnte entscheidend sein.

    dedlfix.

    1. Hallo
      danke für den Hinweis.

      ldap_connect() will always return a resource as it does not actually connect but just initializes the connecting parameters. The actual connect happens with the next calls to ldap_* funcs, usually with ldap_bind().

      Also wird der eigentliche Connect erst bei ldap_bind() hergestellt und ldap_connect bringt immer einer Ressource id zurück.
      Ok, so hatte ich es auch zuerst versucht.

        
      $bd = @ldap_bind($ad, $USER, $userpassword) ;  
      if($bd === false){  
      $ldaperror = ldap_errno($ad);  
      echo " der ldap error ist $ldaperror <br>";  
      ...  
      
      

      Das Problem ist hier nun aber das der Bind ja nicht klappt. Ich bekomme aber einer Errorno "-1" zurück und nicht wie ich erwartet hatte eine 81 wie ich es an anderer Stelle gelesen habe.

      Die Frage ist also wie man das am besten abfangen kann?

      Gruss
      Werner

      1. Hi,

        ldap_connect() will always return a resource as it does not actually connect but just initializes the connecting parameters. The actual connect happens with the next calls to ldap_* funcs, usually with ldap_bind().

        Also wird der eigentliche Connect erst bei ldap_bind() hergestellt und ldap_connect bringt immer einer Ressource id zurück.

        ja, so verstehe ich das auch.

        $bd = @ldap_bind($ad, $USER, $userpassword) ;

        if($bd === false){
        $ldaperror = ldap_errno($ad);
        echo " der ldap error ist $ldaperror <br>";
        ...

        
        >   
        > Das Problem ist hier nun aber das der Bind ja nicht klappt. Ich bekomme aber einer Errorno "-1" zurück und nicht wie ich erwartet hatte eine 81 wie ich es an anderer Stelle gelesen habe.  
          
        Beziehst du dich mit dieser Erwartung auf den [Nutzerkommentar zu ldap_errno()](http://us3.php.net/manual/en/function.ldap-errno.php#20665)? Dort steht aber für 0x51 ausdrücklich drüber: "Used by some APIs". Mit anderen Worten: Dieser Code wird nicht von allen Implementierungen verwendet.  
          
        Übrigens ist der typsichere Vergleich hier nicht nötig, weil ldap\_bind() immer ein boolsches Ergebnis liefert. Ein schlichtes `if (!$bd) {...}`{:.language-php} ist also völlig ausreichend und angenehmer zu lesen.  
          
        Dein Fehlercode -1 ist zwar in dieser Liste nicht aufgeführt, aber was hindert dich daran, beim Auftreten \*irgendeines\* Fehlers bei ldap\_bind() zu konstatieren, der Server sei nicht erreichbar? Sicher, die Gründe dafür sind vielfältig, aber ist das an der Stelle relevant?  
          
        
        > Die Frage ist also wie man das am besten abfangen kann?  
          
        So, wie du es bereits tust. Du kannst ja auch noch [ldap_err2str()](http://us3.php.net/manual/en/function.ldap-err2str.php) bemühen, um den Fehler in Prosa zu erhalten.  
          
        So long,  
         Martin  
        
        -- 
        Die letzten Worte des Fallschirmspringers:  
        ELENDE SCHEISSMOTTEN!!  
        Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
        
        1. Hallo

          hmm, mir geht es eigentlich darum anhand des Error Codes eine schön formatierte Ausgabe für den Anwender zu machen. ALso bei Error 41 "Falsches Passwort oder Benutzername" usw.
          Ich dachte halt dies auch in dem Fall hinzubekommen wenn der LDAP Server schon garnicht erreichabr ist.

          Gruss
          Werner