2017-10-23 2 views
1

PHP의 기본 기능을 사용하여 LDAP Serach를하고 싶습니다. ldap 연결 (함수 ldap_connect())에 의해 반환 된 리소스에 문제가 있습니다.PHP - ldap_bind error는 매개 변수 1이 리소스가 될 것으로 예상하고, 부울은 주어진 것입니다.

경고 : ldap_bind() : 서버에 바인딩 할 수 없습니다 : LDAP에게의 서버에 연결할 수 없습니다 ..

는 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에 이것을 추가하여 작동하는지 확인하십시오 : 또는 죽습니다 ("$ connectStr에 연결할 수 없습니다"); – Nic3500

+0

전체 LDAP URI를 사용하는 대신 두 개의 매개 변수 (호스트 및 포트)를 사용하여 연결하면 어떻게됩니까? 예 : '$ ds = ldap_connect ('valid.host.name.fr', 636); ' – EricLavault

+0

ldap_connect 후에 응답으로 "성공"이 표시됩니다. 경고를 주셔서 감사합니다, 그것은 과거의 복사 오류였습니다 @ RathanNaik – cglvli

답변

2

유효하지 않은 인증서 오류입니다. ldap_connect()은 오류가 발생해도 항상 자원을 반환합니다.

관련 문서;

ldap_connect()은 실제로 연결되지 않았지만 연결 매개 변수를 초기화하기 때문에 항상 자원을 반환합니다. 실제 연결은 당신이 잘못된 것으 인증서를 사용하는 경우, 당신이

/etc/openldap/ldap.conf

를 구성 받아 강제 할 수 ldap_bind().

으로 보통 ldap_* funcs에 대한 다음 호출로 발생 TLS_REQCERT allow 또는 TLS_REQCERT never 지시어. 당신은 conf의 파일을 modifiy 할 수있는 권한이없는 경우

, 단순히 당신은 자세한 내용을 볼 수 7LDAP_OPT_DEBUG_LEVEL을 설정할 수 있습니다, 팁으로 putenv('LDAPTLS_REQCERT=allow'); 또는 putenv('LDAPTLS_REQCERT=never');

하여 스크립트의 시작 부분에서 환경 변수를 설정할 수 있습니다 스크립트에 ldap_set_option(NULL, LDAP_OPT_DEBUG_LEVEL, 7);을 추가하여 연결의

+0

'ldap.conf' 파일을 변경할 권한이 없습니다. 나는'putenv ('LDAPTLS_REQCERT = allow');를 추가했고 이제 작동한다. 내 dev 환경에서 그것을 사용합니다. 인증을 건너 뛸 권한이 있는지 확실하지 않습니다. 도와 주셔서 감사합니다. – cglvli

관련 문제