2017-10-23 49 views
1

PHPの基本機能を使用してldap serachを実行します。私は、ldap接続(関数ldap_connect())によって返されたリソースに問題があります。これは、正常に動作しているようだが、それはLDAPバインドに来るとき、私はこの警告を取得しています:PHP - ldap_bindエラーは、パラメータ1がリソースであることを期待しています。ブール値が指定されています

警告:はldap_bind():サーバーにバインドすることができません:にLDAP サーバーに接続できません。..

そしてldap_error()次の警告を返す:

警告:ldap_error()は、パラメータ1は、リソースに与えられたブール ことを期待..

私はvar_dumpを使ってldap_connectによって返された値を見ました。以下は完全なコードです:

<? php 
$host = "ldaps://valid.host.name.fr"; 
$port = 636; 
$username = 'uid=HEDE45,ou=Applis,dc=ldapannuaire'; 
$password = 'mdp1234'; 
$baseDn = 'dc=ldapannuaire'; 
$person = 'JACKSON'; 
$filter="(sn=$person*)"; 

$connectStr = $host.":".$port; 

echo "Connecting ...\n"; 
$ds = ldap_connect($connectStr); 

ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3) or die('Unable to set LDAP protocol version'); 
ldap_set_option($ds, LDAP_OPT_REFERRALS, 0) or die('Unable to set LDAP referrals'); // We need this for doing an LDAP search. 

if ($ds) { 
    echo "Binding ...\n"; 
    var_dump($ds); 
    $bind = ldap_bind($ds, $username, $password); 
    ldap_error($bind); 
    if ($bind) { 
     echo "LDAP bind successful...\n"; 
     $search = ldap_search($ds, $baseDn, $filter) or exit("Unable to search LDAP server, response was: " . ldap_error($search)); 
     // Search users 
     $info = ldap_get_entries($ds, $search); 
     echo $info["count"]." entries returned\n"; 
     // close connection 
     ldap_unbind($bind); 
    } else { 
     echo "LDAP bind failed...\n"; 
    } 
} 
ldap_close($ds); 

私はコマンドラインを使ってSSH端末で自分のコードを実行します。バインドした後、私はLDAPリソースリンク(resource(8) of type (ldap link))を有するのではなく、ブール値を持っている理由私は理解していない

[[email protected]~]$ /software/apache/apa_2.2.24/php-5.3.23/bin/php -c /myproject/apache_2.2.24/php_5.3.23/conf/php.ini /myproject/apache_2.2.24/htdocs/chrons/searchPeople.php 
Connecting ... 
Binding ... 
resource(8) of type (ldap link) 

Warning: ldap_bind(): Unable to bind to server: Can't contact LDAP server in /myproject/apache_2.2.24/htdocs/chrons/searchPeople.php on line 21 

Warning: ldap_error() expects parameter 1 to be resource, boolean given in /myproject/apache_2.2.24/htdocs/chrons/searchPeople.php on line 22 
LDAP bind failed... 
[[email protected] ~]$ 

:私は、次の結果を得ます。誰かが問題を見つけるのを助けることができますか?

ありがとう。

+0

からhttp://php.net/manual/en/function.ldap-connect.php *構文チェックが失敗した場合は、FALSE *を返します。それはここに当てはまるでしょうか?あなたのldap_connectにこれを加えて、それが動作しているかどうかを知る:またはdie( "$ connectStrに接続できませんでした"); – Nic3500

+0

完全なLDAP URIを使用する代わりに、2つのパラメータ(ホストおよびポート用)を使用して接続するとどうなりますか?例えば'$ ds = ldap_connect( 'valid.host.name.fr'、636);' – EricLavault

+0

ldap_connectの後の応答として「成功」が返ってきます。 警告のおかげで、それはコピー過去のエラー@ RathanNaik – cglvli

答えて

2

無効な証明書エラーのようです。 ldap_connect()はエラーが発生しても常にリソースを返します。

ドキュメントについては、

ldap_connect()は、それが実際には接続しないよう、常にリソースを返しますが、単に接続パラメータを初期化します。実際の接続は、あなたがnonvalid証明書を使用している場合、あなたはそれが

/etc/openldap/ldap.conf

の設定を受け入れるように強制することができldap_bind().

で通常、ldap_*のfuncs隣の呼び出しで発生しますTLS_REQCERT allow または TLS_REQCERT neverディレクティブです。あなたは単にあなたがヒントとしてputenv('LDAPTLS_REQCERT=allow');またはputenv('LDAPTLS_REQCERT=never');

により、スクリプトの先頭に環境変数を設定することができ、confファイルをmodifiyする権限を持っていない場合

、あなたはさらに詳細を確認する7LDAP_OPT_DEBUG_LEVELを設定することができますスクリプトにldap_set_option(NULL, LDAP_OPT_DEBUG_LEVEL, 7);を追加して接続の

+0

私は 'ldap.conf'ファイルを変更できません。 'putenv( 'LDAPTLS_REQCERT = allow');を追加しました。私はdev environementでそれを使用します。認証をスキップする権限があるかどうかはわかりません。助けてくれてありがとう。 – cglvli

関連する問題