File: ldap.xml

package info (click to toggle)
phpdoc 20020310-1
  • links: PTS
  • area: main
  • in suites: woody
  • size: 35,272 kB
  • ctags: 354
  • sloc: xml: 799,767; php: 1,395; cpp: 500; makefile: 200; sh: 140; awk: 51
file content (1256 lines) | stat: -rwxr-xr-x 51,035 bytes parent folder | download
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
<?xml version="1.0" encoding="iso-8859-1"?>
 <reference id="ref.ldap">
  <title>Funciones LDAP</title>
  <titleabbrev>LDAP</titleabbrev>

  <partintro>
   <sect1 id="ldap.intro">
    <title>Introducci&oacute;n a LDAP</title>
    <para>
     LDAP es el protocolo de acceso a directorios ligero (Lightweight
     Directory Access Protocol), un protocolo usado para acceder a
     "Servidores de Directorio".  El directorio es una clase especial
     de base de datos que contiene informaci&oacute;n estructurada en forma
     de &aacute;rbol.
    </para>
    <para> 
     El concepto es similar a la estructura de directorios de los discos
     duros, pero en este caso, el directorio raiz es "El Mundo" y los
     subdirectorios de primer nivel son los "pa&iacute;ses".  Niveles inferiores
     de la estructura de directorio  contienen entradas para compa&ntilde;&iacute;as,
     organizaciones o lugares, y en niveles a&uacute;n inferiores se encuentran
     las entradas para la gente, y quiz&aacute;s de equipos inform&aacute;ticos y
     documentos.
    </para>
    <para>
     Para referirse a un fichero en un subdirectorio del disco duro
     se usa algo como
    </para>
    <literallayout>
    /usr/local/misapps/docs
    </literallayout>
    <para>
     Las barras marcan cada divisi&oacute;n en la referencia al fichero, y
     la secuencia es leida de izquierda a derecha.
    </para>
    <para> 
     El equivalente a la referencia a un fichero en LDAP es el
     "distinguished name" (nombre distinguible), abreviado como "db".
     Un ejemplo de dn podr&iacute;a ser.
    </para>
    <literallayout>
    cn=Pedro P&eacute;rez,ou=Contabilidad,o=Mi Compa&ntilde;&iacute;a,c=ES
    </literallayout>
    <para>
     Las comas marcan cada divisi&oacute;n en la referencia, y la secuencia
     se lee de derecha a izquierda.  Este dn se leer&iacute;a como ..
    </para>
    <literallayout>
    country = ES
    organization = Mi Compa&ntilde;&iacute;a
    organizationalUnit = Contabilidad
    commonName = Pedro P&eacute;rez
    </literallayout>
    <para>
     De la misma manera que no hay reglas estrictas sobre como organizar
     la estructura de directorios de un disco duro, un administrador de un
     servidor de directorio puede establecer cualquier estructura que sea
     &uacute;til para sus prop&oacute;sitos.  Sin embargo hay algunos acuerdos t&aacute;citos
     que siempre deben seguirse.  El mensaje es que no se puede escribir
     c&oacute;digo para acceder un directorio si no se conoce algo de su
     estructura, igual que no se puede usar una base de datos sin alg&uacute;n
     conocimiento sobre lo que est&aacute; disponible en ella.
    </para>
   </sect1>

   <sect1 id="ldap-example">
    <title>Ejemplo de c&oacute;digo completo</title>
     <para>
      Recuperar informacion para todas las entradas donde el apellido
      empiece por "P" de un servidor de directorio, mostrando un
      extracto con el nombre y direcci&oacute;n de correo electr&oacute;nico.
     </para>

    <example>
     <title>ejemplo de b&uacute;squeda LDAP</title>
<programlisting role="php">
&lt;?php
// La secuencia b&aacute;sica para trabajar con LDAP es conectar, autentificarse,
// buscar, interpretar el resultado de la b&uacute;squeda y cerrar la conexi&oacute;n.

echo "&lt;h3>Prueba de consulta LDAP&lt;/h3>";
echo "Conectando ...";
$ds=ldap_connect("localhost");  // Debe ser un servidor LDAP v&aacute;lido!
echo "El resultado de la conexi&oacute;n es ".$ds."&lt;p>";

if ($ds) { 
    echo "Autentificandose  ..."; 
    $r=ldap_bind($ds);     // Autentificaci&oacute;n an&oacute;nima, t&iacute;picamente con
                           // acceso de lectura
    echo "El resultado de la autentificaci&oacute;n es ".$r."&lt;p>";

    echo "Buscando (sn=P*) ...";
    // Busqueda de entradas por apellidos
    $sr=ldap_search($ds,"o=Mi Compa&ntilde;ia, c=ES", "sn=P*");  
    echo "El resultado de la b&uacute;squeda es ".$sr."&lt;p>";

    echo "El n&uacute;mero de entradas devueltas es ".ldap_count_entries($ds,$sr)."&lt;p>";

    echo "Recuperando entradas ...&lt;p>";
    $info = ldap_get_entries($ds, $sr);
    echo "Devueltos datos de ".$info["count"]." entradas:&lt;p>";

    for ($i=0; $i<$info["count"]; $i++) {
        echo "dn es: ". $info[$i]["dn"] ."&lt;br>";
        echo "La primera entrada cn es: ". $info[$i]["cn"][0] ."&lt;br>";
        echo "La primera entrada email es: ". $info[$i]["mail"][0] ."&lt;p>";
    }

    echo "Cerrando conexi&oacute;n";
    ldap_close($ds);

} else {
    echo "&lt;h4>Ha sido imposible conectar al servidor LDAP&lt;/h4>";
}
?>
</programlisting>
    </example>

   <sect2 id="ldap.using">
    <title>Usando las llamadas LDAP de PHP</title>
     <para>
      Es necesario conseguir y compilar la librer&iacute;as cliente de LDAP
      ya sea del paquete ldap-3.3 de la Universidad de Michigan o del
      Netscape Directory SDK.  Tambi&eacute;n es necesario recompilar PHP
      con soporte LDAP activado para que la funciones LDAP de PHP
      funcionen.
     </para><para>
      Antes de usarse las llamadas LDAP se debe saber ..

    <itemizedlist>
     <listitem>
      <para>
       El nombre o direcci&oacute;n del servidor de directorio que se va a usar
      </para>
     </listitem>
     <listitem>
      <para>
       El "dn base" del servidor (la parte del directorio global contenida
       en ese servidor, que puede ser por ejemplo "o=Mi Compa&ntilde;ia,c=ES")
      </para>
     </listitem>
     <listitem>
      <para>
       Si es necesaria contrase&ntilde;a para acceder al servidor (muchos
       servidores ofrecen acceso de lectura para usuarios an&oacute;nimos
       pero requieren un password para cualquier otro acceso)
      </para>
     </listitem>
    </itemizedlist></para>

     <para>
      La secuencia t&iacute;pica de llamadas LDAP suele implementarse
      en aplicaciones que siguen el siguiente patr&oacute;n:
<literallayout>
  ldap_connect()    // establecer la conexi&oacute;n con el servidor
     |
  ldap_bind()       // login an&oacute;nimo o autentificado
     |
  Hacer b&uacute;squedas o actualizaciones en el directorio
  y mostrar los resultados
     |
  ldap_close()      // Cerrar la conexi&oacute;n
</literallayout></para>
   </sect2>


   <sect2 id="ldap.moreinfo">
    <title>M&aacute;s informaci&oacute;n</title>
     <para>
      Mucha informaci&oacute;n acerca de LDAP puede ser consultada en
     </para>

    <itemizedlist>
     <listitem>
      <para>
       <ulink url="&url.ldap.netscape;">Netscape</ulink>
      </para>
     </listitem>
     <listitem>
      <para>
       <ulink url="&url.ldap.michigan;">Universidad de Michigan</ulink>
      </para>
     </listitem>
     <listitem>
      <para>
       <ulink url="&url.ldap.openldap;">Proyecto OpenLDAP</ulink>
      </para>
     </listitem>
     <listitem>
      <para>
       <ulink url="&url.ldap.ldapworld;">LDAP World</ulink>
      </para>
     </listitem>
    </itemizedlist>

     <para>
      El SDK de Netscape contiene una Gu&iacute;a de Programaci&oacute;n muy &uacute;til
      en formato html.    
     </para>
   </sect2>
  </sect1>

  </partintro>


  <refentry id="function.ldap-add">
   <refnamediv>
    <refname>ldap_add</refname>
    <refpurpose>A&ntilde;ade entradas a un directorio LDAP</refpurpose>
   </refnamediv>
   <refsect1>
    <title>Descripci&oacute;n</title>
     <methodsynopsis>
     <type>int</type><methodname>ldap_add</methodname>
     <methodparam><type>int</type><parameter>identificador_de_conexion</parameter></methodparam>
     <methodparam><type>string</type><parameter>dn</parameter></methodparam>
     <methodparam><type>array</type><parameter>entrada</parameter></methodparam>
     </methodsynopsis>
    <para>
     Devuelve verdadero cuando finaliza correctamente y falso se produce un error.
    </para><para> 
     La funci&oacute;n <function>ldap_add</function> se usa para a&ntilde;adir entradas
     o registros a un directorio LDAP. El DN ("distinguished name", nombre
     distinguible, la referencia de cualquier entrada LDAP) es especificado
     por dn. El array entrada especifica la informaci&oacute;n que quiere a&ntilde;adirse.
     Los valores del array son indexados por sus propios atributos. En caso
     de valores m&uacute;ltiples para un mismo atributo, son indexados usando enteros
     empezando con 0.
    </para>
	<informalexample>
<literallayout>
    entry["atributo1"] = valor
    entry["atributo2"][0] = valor1
    entry["atributo2"][1] = valor2
</literallayout>
     </informalexample>
     <example>
      <title>Ejemplo completo con login atentificado</title>
<programlisting role="php">
&lt;?php
$ds=ldap_connect("localhost");  // Asumimos que el servidor LDAP est&aacute; en el
                                // servidor local

if ($ds) {
    // autentificarse con el dn apropiado para tener permisos de modificaci&oacute;n
    $r=ldap_bind($ds,"cn=root, o=Mi Compa&ntilde;ia, c=ES", "secreto");

    // prepare data
    $info["cn"]="Pedro P&eacute;rez";
    $info["sn"]="Pedro";
    $info["mail"]="pedro.p@algun.sitio";
    $info["objectclass"]="persona";

    // add data to directory
    $r=ldap_add($ds, "cn=Pedro P&eacute;rez, o=Mi Compa&ntilde;ia, c=ES", $info);

    ldap_close($ds);
} else {
    echo "Ha sido imposible conectar al servidor LDAP"; 
}
?>
</programlisting>
     </example>
   </refsect1>
  </refentry>

  <refentry id="function.ldap-mod-add">
   <refnamediv>
    <refname>ldap_mod_add</refname>
    <refpurpose>A&ntilde;ade valores de atributos</refpurpose>
   </refnamediv>
   <refsect1>
    <title>Descripci&oacute;n</title>
     <methodsynopsis>
     <type>int</type><methodname>ldap_mod_add</methodname>
     <methodparam><type>int</type><parameter>identificador_de_conexion</parameter></methodparam>
     <methodparam><type>string</type><parameter>dn</parameter></methodparam>
     <methodparam><type>array</type><parameter>entrada</parameter></methodparam>
     </methodsynopsis>
    <para>
     Devuelve verdadero cuando finaliza correctamente y falso se produce un error.
    </para>  
	<para>
       Esta funci&oacute;n a&ntilde;adir uno o varios atributos al dn especificado.
       Realiza la modificaci&oacute;n al nivel de atributos, en vez de hacerlo
       al nivel de objetos.  Las modificaciones a nivel de objeto son
       propocionadas por la funci&oacute;n <function>ldap_add</function>.</para>
   </refsect1>
  </refentry>

  <refentry id="function.ldap-mod-del">
   <refnamediv>
    <refname>ldap_mod_del</refname>
    <refpurpose>Borra valores de atributos</refpurpose>
   </refnamediv>
   <refsect1>
    <title>Descripci&oacute;n</title>
     <methodsynopsis>
     <type>int</type><methodname>ldap_mod_del</methodname>
     <methodparam><type>int</type><parameter>identificador_de_conexion</parameter></methodparam>
     <methodparam><type>string</type><parameter>dn</parameter></methodparam>
     <methodparam><type>array</type><parameter>entrada</parameter></methodparam>
     </methodsynopsis>
    <para>
     returns &true; on success and &false; on error.</para>  
	<para>
       Esta funci&oacute;n elimina atributos del dn especificado.  Realiza la
       modificaci&oacute;n a nivel de atributos, en vez de hacerlo a nivel
       de objetos.  Las modificaciones a nivel de objeto son
       proporcionadas por la funci&oacute;n <function>ldap_del</function>.</para>
   </refsect1>
  </refentry>

  <refentry id="function.ldap-mod-replace">
   <refnamediv>
    <refname>ldap_mod_replace</refname>
    <refpurpose>Reemplaza valores de atributos</refpurpose>
   </refnamediv>
   <refsect1>
    <title>Descripci&oacute;n</title>
     <methodsynopsis>
     <type>int</type><methodname>ldap_mod_replace</methodname>
     <methodparam><type>int</type><parameter>identificador_de_conexion</parameter></methodparam>
     <methodparam><type>string</type><parameter>dn</parameter></methodparam>
     <methodparam><type>array</type><parameter>entrada</parameter></methodparam>
     </methodsynopsis>
    <para>
     Devuelve verdadero cuando finaliza correctamente y falso se produce un error.
    </para>  
	<para>
       Esta funci&oacute;n reemplaza atributos del dn especificado.  Realiza la
       modificaci&oacute;n a nivel de atributos, en vez de hacerlo a nivel
       de objetos.  Las modificaciones a nivel de objeto son
       proporcionadas por la funci&oacute;n <function>ldap_modify</function>.</para>
   </refsect1>
  </refentry>

  <refentry id="function.ldap-bind">
   <refnamediv>
    <refname>ldap_bind</refname>
    <refpurpose>Autentifica en un directorio LDAP</refpurpose>
   </refnamediv>
   <refsect1>
    <title>Descripci&oacute;n</title>
     <methodsynopsis>
     <type>int</type><methodname>ldap_bind</methodname>
     <methodparam><type>int</type><parameter>identificador_de_conexion</parameter></methodparam>
     <methodparam choice="opt"><type>string</type><parameter>rdn_del_usuario</parameter></methodparam>
     <methodparam choice="opt"><type>string</type><parameter>contrase&ntilde;a</parameter></methodparam>
     </methodsynopsis>
    <para>
     Se conecta a un directorio LDAP con un RDN y su contrase&ntilde;a.
     Devuelve verdadero cuando finaliza correctamente y falso se produce un error.
    </para>
    <para>  
     <function>ldap_bind</function> se conecta al directorio
     con un determinado usuario. rdn_de_usuario y contrase&ntilde;a son
     opcionales. Si no son especificados, se intenta el acceso
     an&oacute;nimo.</para>
   </refsect1>
  </refentry>


  <refentry id="function.ldap-close">
   <refnamediv>
    <refname>ldap_close</refname>
    <refpurpose>Cierra una conexi&oacute;n a un servidor LDAP</refpurpose>
   </refnamediv>
   <refsect1>
    <title>Descripci&oacute;n</title>
     <methodsynopsis>
     <type>int</type><methodname>ldap_close</methodname>
     <methodparam><type>int</type><parameter>identificador_de_conexion</parameter></methodparam>
     </methodsynopsis>
    <para>
     Devuelve verdadero cuando finaliza correctamente y falso se produce un error.
    </para> 
    <para>
     <function>ldap_close</function> cierra la conexi&oacute;n con
     el servidor LDAP asociada con el <parameter>identificador_de_conexion</parameter>
     especificado.</para>
    <para>
     Esta llamada es id&eacute;ntica internamente a
     <function>ldap_unbind</function>. La API LDAP usa la llamada
     <function>ldap_unbind</function>, y por lo tanto quiz&aacute;s deba
     usar esta llamada en lugar de <function>ldap_close</function>.</para>
   </refsect1>
  </refentry>


  <refentry id="function.ldap-connect">
   <refnamediv>
    <refname>ldap_connect</refname>
    <refpurpose>Conecta con un servidor LDAP</refpurpose>
   </refnamediv>
   <refsect1>
    <title>Descripci&oacute;n</title>
     <methodsynopsis>
     <type>int</type><methodname>ldap_connect</methodname>
     <methodparam choice="opt"><type>string</type><parameter>nombre_host</parameter></methodparam>
     <methodparam choice="opt"><type>int</type><parameter>puerto</parameter></methodparam>
     </methodsynopsis>
    <para>
     Devuelve un identificador de conexi&oacute;n positivo en caso de &eacute;xito, &oacute;
     falso si ocurre alg&uacute;n error.</para>  
    <para> 
     <function>ldap_connect</function> establece una conexi&oacute;n con el
     servidor LDAP especificado en <parameter>nombre_host</parameter> y
     <parameter>puerto</parameter>.  Ambos argumentos son opcionales. Si
     no se especifican, el identificador de la conexi&oacute;n LDAP actualmente
     abierta es devuelto.  Si s&oacute;lo es especificado <parameter>nombre_host</parameter>
     el puerto tomado por defecto es el 389.</para>
   </refsect1>
  </refentry>


  <refentry id="function.ldap-count-entries">
   <refnamediv>
    <refname>ldap_count_entries</refname>
    <refpurpose>Cuenta el n&uacute;mero de entradas de una b&uacute;squeda</refpurpose>
   </refnamediv>
   <refsect1>
    <title>Descripci&oacute;n</title>
     <methodsynopsis>
     <type>int</type><methodname>ldap_count_entries</methodname>
     <methodparam><type>int</type><parameter>identificador_de_conexion</parameter></methodparam>
     <methodparam><type>int</type><parameter>identificador_de_resultado</parameter></methodparam>
     </methodsynopsis>
    <para>
     Devuelve el n&uacute;mero de entradas del resultado o falso si ha ocurrido alg&uacute;n error.</para>
    <para>  
     <function>ldap_count_entries</function> devuelce el n&uacute;mero de
     entradas almacenadas en el resultado de operaciones de b&uacute;squeda
     previas. <parameter>identificador_de_resultado</parameter> identifica
     el resultado ldap interno al que hacemos referencia.</para>
   </refsect1>
  </refentry>


  <refentry id="function.ldap-delete">
   <refnamediv>
    <refname>ldap_delete</refname>
    <refpurpose>Borra una entrada de un directorio</refpurpose>
   </refnamediv>
   <refsect1>
    <title>Descripci&oacute;n</title>
     <methodsynopsis>
     <type>int</type><methodname>ldap_delete</methodname>
     <methodparam><type>int</type><parameter>identificador_de_conexion</parameter></methodparam>
     <methodparam><type>string</type><parameter>dn</parameter></methodparam>
     </methodsynopsis>
    <para>
     Devuelve verdadero cuando finaliza correctamente y falso se produce un error.
    </para>  
    <para>
     La funci&oacute;n <function>ldap_delete</function> borra la
     entrada particular dn del directorio LDAP.</para>
   </refsect1>
  </refentry>


  <refentry id="function.ldap-dn2ufn">
   <refnamediv>
    <refname>ldap_dn2ufn</refname>
    <refpurpose>Convierte un dn al formato User Friendly Naming</refpurpose>
   </refnamediv>
   <refsect1>
    <title>Descripci&oacute;n</title>
     <methodsynopsis>
     <type>string</type><methodname>ldap_dn2ufn</methodname>
     <methodparam><type>string</type><parameter>dn</parameter></methodparam>
     </methodsynopsis>
    <para>
     La funci&oacute;n <function>ldap_dn2ufn</function> es usada para convertir un DN
     en un formato m&aacute;s amigable para el usuario.</para>
   </refsect1>
  </refentry>


  <refentry id="function.ldap-explode-dn">
   <refnamediv>
    <refname>ldap_explode_dn</refname>
    <refpurpose>Divide un DN en las partes que le componen</refpurpose>
   </refnamediv>
   <refsect1>
    <title>Descripci&oacute;n</title>
     <methodsynopsis>
     <type>array</type><methodname>ldap_explode_dn</methodname>
     <methodparam><type>string</type><parameter>dn</parameter></methodparam>
     <methodparam><type>int</type><parameter>con_atributos</parameter></methodparam>
     </methodsynopsis>
    <para>
     La funci&oacute;n <function>ldap_explode_dn</function> es usada para
     dividir un DN devuelto por <function>ldap_get_dn</function> en
     las partes que le componen. Cada parte es conocida como Relative
     Distinguished Name (Nombre Relativo Distinguible) abreviado como
     RDN.  <function>ldap_explode_dn</function> devuelve un array con
     todos esos componentes. <parameter>con_atributos</parameter> sirve
     para especificar si los RDN se devuelven s&oacute;lo como valores o con
     sus atributos tambi&eacute;n (es decir, en un formato atributo=valor).
     Hay que poner <parameter>with_attrib</parameter> a 0 para obtener
     tambi&eacute;n los atributos y a 1 para obtener s&oacute;lo los valores.</para>
   </refsect1>
  </refentry>


  <refentry id="function.ldap-first-attribute">
   <refnamediv>
    <refname>ldap_first_attribute</refname>
    <refpurpose>Devuelte el primer atributo</refpurpose>
   </refnamediv>
   <refsect1>
    <title>Descripci&oacute;n</title>
     <methodsynopsis>
     <type>string</type><methodname>ldap_first_attribute</methodname>
     <methodparam><type>int</type><parameter>identificador_de_conexion</parameter></methodparam>
     <methodparam><type>int</type><parameter>identificador_de_entrada_en_resultado</parameter></methodparam>
     <methodparam><type>int</type><parameter>identificador_ber</parameter></methodparam>
     </methodsynopsis>
    <para>
     Devuelte el primer atributo en la entrada o falso si ocurre alg&uacute;n error.
    </para> 
    <para> 
     De manera similar a leer entradas, los atributos tambi&eacute;n son leidos
     de uno en uno de una entrada en particular del directorio.
     <function>ldap_first_attribute</function> devuelve el primer atributo
     en la entrada a la que apunta el identificador_de_entrada_en_resultado
     El resto de los atributos son obtenidos llamanda a la funci&oacute;n
     <function>ldap_next_attribute</function> sucesivamente.
     El par&aacute;metro <parameter>indetificador_ber</parameter> es el identificador
     del puntero interno a memoria. Es pasado por referencia. El mismo 
     <parameter>indetificador_ber</parameter> es pasado a la funci&oacute;n
     <function>ldap_next_attribute</function> que modifica dicho puntero.
    </para>
    <para>
     Ver tambi&eacute;n <function>ldap_get_attributes</function></para>
   </refsect1>
  </refentry>


  <refentry id="function.ldap-first-entry">
   <refnamediv>
    <refname>ldap_first_entry</refname>
    <refpurpose>Devuelve el identificador del primer resultado</refpurpose>
   </refnamediv>
   <refsect1>
    <title>Descripci&oacute;n</title>
     <methodsynopsis>
     <type>int</type><methodname>ldap_first_entry</methodname>
     <methodparam><type>int</type><parameter>identificador_de_conexion</parameter></methodparam>
     <methodparam><type>int</type><parameter>identificador_de_resultado</parameter></methodparam>
     </methodsynopsis>
    <para>
     Devuelve el identificador de la primera entrada del resultado
     &oacute; falso en caso de error.</para>
    <para>  
     Las entradas en un resultado LDAP son leidas secuencialmente
     usando las funciones <function>ldap_first_entry</function> y
     <function>ldap_next_entry</function>.
     <function>ldap_first_entry</function> devuelve el identificador
     de la primera entrada del resultado. Este identificador es
     entonces suministrado a la rutina <function>lap_next_entry</function>
     pata obtener sucesivas entradas del resultado.</para>
    <para>
     Ver tambi&eacute;n <function>ldap_get_entries</function>.</para>
   </refsect1>
  </refentry>


  <refentry id="function.ldap-free-result">
   <refnamediv>
    <refname>ldap_free_result</refname>
    <refpurpose>Libera la memoria que almacena los resultados</refpurpose>
   </refnamediv>
   <refsect1>
    <title>Descripci&oacute;n</title>
     <methodsynopsis>
     <type>int</type><methodname>ldap_free_result</methodname>
     <methodparam><type>int</type><parameter>identificador_de_resultado</parameter></methodparam>
     </methodsynopsis>
    <para>
     Devuelve verdadero cuando finaliza correctamente y falso se produce un error.
    </para>
    <para>  
     <function>ldap_free_result</function> libera la memoria
     reservada internamente para almacenar el resultado de b&uacute;squedas
     LDAP asociada al identificador <parameter>identificador_de_resultado</parameter>.
     Toda la memoria de resultados es autom&aacute;ticamente liberada
     al finalizarse la ejecuci&oacute;n de un script.</para>
    <para>
     Normalmente la memoria reservada para resultados ldap se libera
     al final del script. En caso de que el script realice sucesivas
     b&uacute;squedas que devuelvan conjuntos de resultados grandes, puede
     utilizarse <function>ldap_free_result</function> para mantener
     bajo el uso de memoria del script durante su ejecuci&oacute;n.</para>
   </refsect1>
  </refentry>


  <refentry id="function.ldap-get-attributes">
   <refnamediv>
    <refname>ldap_get_attributes</refname>
    <refpurpose>Obtiene los atributos de una entrada de un resultado de b&uacute;squeda</refpurpose>
   </refnamediv>
   <refsect1>
    <title>Descripci&oacute;n</title>
     <methodsynopsis>
     <type>array</type><methodname>ldap_get_attributes</methodname>
     <methodparam><type>int</type><parameter>identificador_de_conexion</parameter></methodparam>
     <methodparam><type>int</type><parameter>identificador_de_entrada_de_resultado</parameter></methodparam>
     </methodsynopsis>
    <para>
     Devuelve una completa informaci&oacute;n de la entrada en un array
     multidimensional o falso en caso de error.</para>  
    <para>
     La funci&oacute;n <function>ldap_get_attributes</function> es usada para
     simplificar el leer atributos y valores de una entrada de un
     resultado de b&uacute;squeda. El valor de retorno es un array multidimensional
     de atributos y sus valores.</para>
    <para>
     Teniendo localizado una entrada espec&iacute;fica en el directorio
     se puede conseguir la informaci&oacute;n que contiene dicha entrada
     usando esta llamada. Puede usar esta funci&oacute;n para aplicaciones
     que naveguen por las entradas del directorio y/o cuando no
     se conoce la estructura de las entradas del directorio. En
     otras aplicaciones se busca un atributo espec&iacute;fico, como la
     direcci&oacute;n de email o los apellidos y no importa el resto de
     informaci&oacute;n contenida..</para>
    <para>
     <informalexample><literallayout>
valor_devuelto["count"] = n&uacute;mero de atributos en la entrada
valor_devuelto[0] = primer atributo
valor_devuelto[n] = en&eacute;simo atributo

valor_devuelto["atributo"]["count"] = n&uacute;mero de vaslores del atributo
valor_devuelto["atributo"][0] = primer valor del atributo
valor_devuelto["atributo"][i] = i&eacute;simo valor del atributo
</literallayout></informalexample>

    <example>
     <title>Mostrar la lista de atributos contenida en una entrada espec&iacute;fica
     de un directorio </title>
<programlisting role="php">
// $ds es un identificador de conexi&oacute;n al directorio

// $sr es un resultado de b&uacute;squeda v&aacute;lido de una llamada
// anterior a una de las funciones de b&uacute;squeda en directorios
// ldap.

$entrada = ldap_first_entry($ds, $sr);

$atributos = ldap_get_attributes($ds, $entrada);

echo $atributos["count"]." atributos contenidos en esta entrada:&lt;p>";

for ($i=0; $i<$atributos["count"]; $i++)
    echo $atributos[$i]."&lt;br>";
</programlisting>
</example></para>

     <para>
      Ver tambi&eacute;n <function>ldap_first_attribute</function> y
      <function>ldap_next_attribute</function></para>

   </refsect1>
  </refentry>


  <refentry id="function.ldap-get-dn">
   <refnamediv>
    <refname>ldap_get_dn</refname>
    <refpurpose>Obtiene el DN de una entrada de un resultado</refpurpose>
   </refnamediv>
   <refsect1>
    <title>Descripci&oacute;n</title>
     <methodsynopsis>
     <type>string</type><methodname>ldap_get_dn</methodname>
     <methodparam><type>int</type><parameter>indentificador_de_conexion</parameter></methodparam>
     <methodparam><type>int</type><parameter>indentificador_de_entrada_de_resultado</parameter></methodparam>
     </methodsynopsis>
    <para>
     Devuelve el DN de la entrada del resultado o falso en caso de error.</para>  
    <para>
     La funci&oacute;n <function>ldap_get_dn</function> se utiliza para obtener el
     DN de una entrada de un resultado de b&uacute;squeda.</para>
   </refsect1>
  </refentry>


  <refentry id="function.ldap-get-entries">
   <refnamediv>
    <refname>ldap_get_entries</refname>
    <refpurpose>Obtiene todas las entradas de un resultado</refpurpose>
   </refnamediv>
   <refsect1>
    <title>Descripci&oacute;n</title>
     <methodsynopsis>
     <type>array</type><methodname>ldap_get_entries</methodname>
     <methodparam><type>int</type><parameter>indentificador_de_conexion</parameter></methodparam>
     <methodparam><type>int</type><parameter>indentificador_de_resultado</parameter></methodparam>
     </methodsynopsis>
    <para>
     Devuelve una completa informaci&oacute;n de un resultado de b&uacute;squeda
     en un array multidimensional o falso en caso de error.</para>  
    <para>  
     La funci&oacute;n <function>ldap_get_entries</function> es usada para
     simplificar el leer m&uacute;ltiples entradas de de un resultado y
     despu&eacute;s leer sus atributos y multiples valores. Toda la informaci&oacute;n
     es devuelta por una llamada a una funci&oacute;n en forma de array
     multidimensional. La estructura del array es como se muestra
     m&aacute;s abajo.</para>
    <para>
     Los indices de atributos son convertidos a min&uacute;sculas. (Los
     atributos de servidores de directorios son indiferentes a las
     mayusculas/minusculas, pero no cuando son usados como indices
     de arrays)

    <informalexample>
<literallayout>
valor_devuelto["count"] = n&uacute;mero de entradas del resultado
valor_devuelto[0] : contiene los detalles de la primera entrada

valor_devuelto[i]["dn"] =  DN de la entrada i&eacute;sima del resultado

valor_devuelto[i]["count"] = n&uacute;mero de atributos de la entrada i&eacute;sima
valor_devuelto[i][j] = j&eacute;simo atributo de la i&eacute;sima entrada del resultado

valor_devuelto[i]["atributo"]["count"] = n&uacute;mero de valores para "atributo"
    en la entrada i&eacute;sima
valor_devuelto[i]["atributo"][j] = j&eacute;simo valor de "atributo" en la entrada
    i&eacute;sima
</literallayout>
    </informalexample></para>
	
     <para>
      Ver tambi&eacute;n <function>ldap_first_entry</function> y
      <function>ldap_next_entry</function></para>
   </refsect1>
  </refentry>


  <refentry id="function.ldap-get-values">
   <refnamediv>
    <refname>ldap_get_values</refname>
    <refpurpose>Obtiene todos los valores de un atributo de una entrada</refpurpose>
   </refnamediv>
   <refsect1>
    <title>Descripci&oacute;n</title>
     <methodsynopsis>
     <type>array</type><methodname>ldap_get_values</methodname>
     <methodparam><type>int</type><parameter>identificador_de_conexion</parameter></methodparam>
     <methodparam><type>int</type><parameter>identificador_de_entrada_de_resultado</parameter></methodparam>
     <methodparam><type>string</type><parameter>atributo</parameter></methodparam>
     </methodsynopsis>
    <para>
     Devuelve un array de valores del atributo o falso en caso de error.</para>
    <para>  
     La funci&oacute;n <function>ldap_get_values</function> se utiliza para
     obtener todos los valores de un atributo de una entrada. La entrada
     del resultado es especificada por el
     <parameter>identificador_de_entrada_de_resultado</parameter>. El
     n&uacute;mero de valores se almacena en el &iacute;ndice "count" del array
     devuelto. Los valores individuales se almacenan con &iacute;ndices enteros
     en el array.  El primer &iacute;ndice es 0.</para>  
    <para>
     Esta llamada necesita un <parameter>identificador_de_entrada_de_resultado</parameter>,
     por lo que necesita ser precedida por una de las llamadas de
     b&uacute;squeda ldap y una llamada para obtener una entrada en particular
     del resultado.</para>
    <para>
     La aplicaci&oacute;n debe ser o bien programada espec&iacute;ficamente para
     buscar ciertos atributos (como apellidos o email) o bien
     utilizar la funci&oacute;n <function>ldap_get_attributes</function>
     para averiguar que atributos existen para una entrada dada,
     antes de llamar a <function>ldap_get_values</function>.</para>
    <para>
     LDAP permite mas de un valor para cada atributo, por lo que
     se puede, por ejemplo, almacenar varias direcciones de email
     para una persona en el directorio y nombrar a ese atributo como
     "email"

    <informalexample>
<literallayout>
valor_devuelto["count"] = n&uacute;mero de valores del atributo
valor_devuelto[0] = primer valor del atributo
valor_devuelto[i] = i&eacute;simo valor del atributo
</literallayout>
    </informalexample>

     <example>
      <title>Listar todos los valores del atributo "email" de una entrada de un directorio </title>
<programlisting role="php">
// $ds es un identificador de conexi&oacute;n al directorio

// $sr es un resultado de b&uacute;squeda v&aacute;lido de una llamada
// anterior a una de las funciones de b&uacute;squeda en directorios
// ldap.

// $entrada es un identificador de entrada v&aacute;lido de una llamada
// anterior a una de las funciones que devuelven una entrada de
// directorio

$valores = ldap_get_values($ds, $entrada,"email");

echo $valores["count"]." direcciones de email para esta entrada.&lt;p>";

for ($i=0; $i &lt; $valores["count"]; $i++)
    echo $valores[$i]."&lt;br>";
</programlisting>
     </example></para>

   </refsect1>
  </refentry>


  <refentry id="function.ldap-get-values-len">
   <refnamediv>
    <refname>ldap_get_values_len</refname>
    <refpurpose>Obtiene todos los valores binarios de un atributo de una entrada</refpurpose>
   </refnamediv>
   <refsect1>
    <title>Description</title>
     <methodsynopsis>
     <type>array</type><methodname>ldap_get_values_len</methodname>
     <methodparam><type>int</type><parameter>indentificador_de_conexion</parameter></methodparam>
     <methodparam><type>int</type><parameter>indentificador_de_entrada_de_resultado</parameter></methodparam>
     <methodparam><type>string</type><parameter>atributo</parameter></methodparam>
     </methodsynopsis>
    <para>
     Devuelve un array de valores del atributo o falso en caso de error.</para>
    <para>  
     La funci&oacute;n <function>ldap_get_values_len</function> se utiliza
     para obtener todos los valores de un atributo de una entrada de
     un resultado de b&uacute;squeda. La entrada es especificada por el 
     <parameter>indentificador_de_entrada_de_resultado</parameter>.
     El n&uacute;mero de valores se almacena en el &iacute;ndice "count" del array
     devuelto. Los valores individuales se almacenan con &iacute;ndices enteros
     en el array.  El primer &iacute;ndice es 0.</para>  
    <para>
     Esta funci&oacute;n se utiliza exactamente como
     <function>ldap_get_values</function> salvo que permite manejar
     datos binarios y no cadenas de caracteres.</para>
   </refsect1>
  </refentry>


  <refentry id="function.ldap-list">
   <refnamediv>
    <refname>ldap_list</refname>
    <refpurpose>B&uacute;squeda Single-level (Nivel &Uacute;nico)</refpurpose>
   </refnamediv>
   <refsect1>
    <title>Descripci&oacute;n</title>
     <methodsynopsis>
     <type>int</type><methodname>ldap_list</methodname>
     <methodparam><type>int</type><parameter>identificador_de_conexion</parameter></methodparam>
     <methodparam><type>string</type><parameter>dn_base</parameter></methodparam>
     <methodparam><type>string</type><parameter>filtro</parameter></methodparam>
     <methodparam choice="opt"><type>array</type><parameter>atributos</parameter></methodparam>
     </methodsynopsis>
    <para>
     Devuelve un identificador de resultado de b&uacute;squeda o falso en caso de error.</para>  
    <para>
     <function>ldap_list</function> realiza la b&uacute;squeda seg&uacute;n el filtro
     especificado en el directorio con el alcance LDAP_SCOPE_ONELEVEL.</para>
    <para>
     LDAP_SCOPE_ONELEVEL significa que la b&uacute;squeda solo devuelve
     informaci&oacute;n que se encuentre en el nivel inmediatamente inferior
     al dn_base especificado en la llamada a la funci&oacute;n. (Equivalente
     a ejecutar "ls" en un unix y obtener un listado de ficheros y carpetas
     en el directorio de trabajo actual.)</para>
    <para>
     Esta llamada toma un cuarto par&aacute;metro opcional, que es un array
     de los atributos requeridos. Consulte las notas de la funci&oacute;n
     <function>ldap_search</function>.

    <example>
      <title>Produce una lista de todas las unidades organizativas de una compa&ntilde;&iacute;a
       </title>
<programlisting role="php3">
// $ds es un identificador de conexi&oacute;n v&aacute;lido.

$dnbase = "o=Mi Compa&ntilde;&iacute;a, c=ES";
$solonecesito = array("ou");

$sr=ldap_list($ds, $dnbase, "ou=*", $solonecesito);

$info = ldap_get_entries($ds, $sr);

for ($i=0; $i<$info["count"]; $i++)
    echo $info[$i]["ou"][0] ;
</programlisting>
</example></para>
  </refsect1>
  </refentry>


  <refentry id="function.ldap-modify">
   <refnamediv>
    <refname>ldap_modify</refname>
    <refpurpose>Modifica una entrada LDAP</refpurpose>
   </refnamediv>
   <refsect1>
    <title>Descripci&oacute;n</title>
     <methodsynopsis>
     <type>int</type><methodname>ldap_modify</methodname>
     <methodparam><type>int</type><parameter>identificador_de_conexion</parameter></methodparam>
     <methodparam><type>string</type><parameter>dn</parameter></methodparam>
     <methodparam><type>array</type><parameter>entrada</parameter></methodparam>
     </methodsynopsis>
    <para>
     Devuelve verdadero cuando finaliza correctamente y falso se produce un error.
    </para>  
    <para>
     La funci&oacute;n <function>ldap_modify</function> se utiliza para
     modificar entradas existentes en un directorio LDAP. La estructura
     de la entrada es igual a la de <function>ldap_add</function>.</para>
   </refsect1>
  </refentry>


  <refentry id="function.ldap-next-attribute">
   <refnamediv>
    <refname>ldap_next_attribute</refname>
    <refpurpose>Obtiene el siguiente atributo de una entrada</refpurpose>
   </refnamediv>
   <refsect1>
    <title>Descripci&oacute;n</title>
     <methodsynopsis>
     <type>string</type><methodname>ldap_next_attribute</methodname>
     <methodparam><type>int</type><parameter>identificador_de_conexion</parameter></methodparam>
     <methodparam><type>int</type><parameter>identificador_de_entrada_de_resultado</parameter></methodparam>
     <methodparam><type>int</type><parameter>identificador_ber</parameter></methodparam>
     </methodsynopsis>
    <para>
     Devuelve el siguiente atributo de una entrada o falso en caso
     de error.</para>
    <para>  
     <function>ldap_next_attribute</function> es llamado para recuperar
     los atributos de una entrada.  El estado interno del puntero
     es mantenido por el <parameter>identificador_ber</parameter>, que
     es pasado por referencia a la funci&oacute;n. La primera llamada a 
     <function>ldap_next_attribute</function> es realizada con el
     <parameter>identificador_de_entrada_de_resultado</parameter>
     devuelto por la funci&oacute;n <function>ldap_first_attribute</function>.</para>
    <para>
     Ver tambi&eacute;n <function>ldap_get_attributes</function></para>
   </refsect1>
  </refentry>


  <refentry id="function.ldap-next-entry">
   <refnamediv>
    <refname>ldap_next_entry</refname>
    <refpurpose>Obtiene la siguiente entrada de un resultado</refpurpose>
   </refnamediv>
   <refsect1>
    <title>Descripci&oacute;n</title>
     <methodsynopsis>
     <type>int</type><methodname>ldap_next_entry</methodname>
     <methodparam><type>int</type><parameter>identificador_de_conexion</parameter></methodparam>
     <methodparam><type>int</type><parameter>identificador_de_entrada_de_resultado</parameter></methodparam>
     </methodsynopsis>
    <para>
     Devuelve el identificador de la siguiente entrada del resultado.
     Las entradas deben haber sido leidas al principio con 
     <function>ldap_first_entry</function>. Si no hay m&aacute;s entradas
     en el resultado devuelve falso.</para>
    <para>  
     La funci&oacute;n <function>ldap_next_entry</function> se utiliza para
     obtener las entradas almacenadas en un resultado. Llamadas
     sucesivas a la funci&oacute;n 
     <function>ldap_next_entry</function> devuelven las entradas una
     a una hasta que ya no queden m&aacute;s entradas. La primera llamada a
     <function>ldap_next_entry</function> se realiza despu&eacute;s de llamar a
     <function>ldap_first_entry</function>.</para>
    <para>
     Ver tambi&eacute;n <function>ldap_get_entries</function></para>
   </refsect1>
  </refentry>


  <refentry id="function.ldap-read">
   <refnamediv>
    <refname>ldap_read</refname>
    <refpurpose>Lee una entrada</refpurpose>
   </refnamediv>
   <refsect1>
    <title>Descripci&oacute;n</title>
     <methodsynopsis>
     <type>int</type><methodname>ldap_read</methodname>
     <methodparam><type>int</type><parameter>identificador_de_conexi&oacute;n</parameter></methodparam>
     <methodparam><type>string</type><parameter>dn_base</parameter></methodparam>
     <methodparam><type>string</type><parameter>filtro</parameter></methodparam>
     <methodparam choice="opt"><type>array</type><parameter>atributos</parameter></methodparam>
     </methodsynopsis>
    <para>
     Devuelve un identificador de resultado de b&uacute;squeda o falso en caso de error.</para>
    <para>  
     <function>ldap_read</function> realiza la b&uacute;squeda seg&uacute;n el filtro
     especificado con alcance LDAP_SCOPE_BASE, por lo que
     es equivalente a leer cualquier entrada del directorio.</para>
    <para>
     No se permiten filtros vacios. Si se pretende obtener absolutamente
     toda la informaci&oacute;n, se debe usar un filtro del tipo "objectClass=*".
     Si conoce que tipos de entradas son usadas en el servidor de directorio
     es conveniente usar el filtro apropiado, como por ejemplo
     "objectClass=inetOrgPerson".</para>
    <para>
     Esta llamada toma un cuarto par&aacute;metro opcional que es un array
     de los atributos requeridos. Consulte las notas de la funci&oacute;n
     <function>ldap_search</function>.</para>
   </refsect1>
  </refentry>


  <refentry id="function.ldap-search">
   <refnamediv>
    <refname>ldap_search</refname>
    <refpurpose>Busca en un arbol LDAP</refpurpose>
   </refnamediv>
   <refsect1>
    <title>Descripci&oacute;n</title>
     <methodsynopsis>
     <type>int</type><methodname>ldap_search</methodname>
     <methodparam><type>int</type><parameter>identificador_de_conexion</parameter></methodparam>
     <methodparam><type>string</type><parameter>dn_base</parameter></methodparam>
     <methodparam><type>string</type><parameter>filtro</parameter></methodparam>
     <methodparam choice="opt"><type>array</type><parameter>atributos</parameter></methodparam>
     </methodsynopsis>
    <para>
     Devuelve un identificador de resultado de b&uacute;squeda o falso en caso de error.</para>
    <para>  
     <function>ldap_search</function> realiza la b&uacute;squeda seg&uacute;n el filtro
     especificado con alcance LDAP_SCOPE_SUBTREE. Esto es equivalente a
     buscar en el directorio entero. <parameter>dn_base</parameter>
     especifica el DN base para el directorio.</para>
    <para>
     Existe un cuarto par&aacute;metro opcional que puede ser a&ntilde;adido
     para restringir los atributos y valores devueltos por el
     servidor a s&oacute;lo los requeridos. Es mucho m&aacute;s eficiente que la
     acci&oacute;n por defecto (que devolver&aacute; todos los atributos y sus
     valores asociados). El uso del cuarto par&aacute;metro debe ser por
     tanto considerado una pr&aacute;ctica recomendable.</para>
    <para>
     El cuerto par&aacute;metro es un array est&aacute;ndar de PHP con los atributos
     requeridos, por ejemplo array("email","sn","cn"). Nota: "dn" siempre es
     devuelto independientemente de que tipos de atributos sean
     solicitados.</para>
    <para>
     Tambi&eacute;n es necesario resaltar que algunos servidores de directorio
     est&aacute;n configurados para devolver un cierto n&uacute;mero de entradas como
     m&aacute;ximo. Si esto ocurre, el servidor indicar&aacute; que solo devuelve
     un conjunto de resultados parcial.</para> 
    <para>
     El filtro de b&uacute;squeda puede ser simple o avanzado, usando
     operadores booleanos en el formato descrito en la documentaci&oacute;n
     sobre LDAP (Consulte el <ulink url="&url.ldap.netscape;">Netscape Directory SDK</ulink>
     para obtener completa informaci&oacute;n sobre filtros).</para>
    <para>
     El ejemplo de abajo recupera la unidad organizativa (ou), apellidos
     nombre com&uacute;n y direcci&oacute;n de email para todas las personas de
     "Mi Compa&ntilde;&iacute;a" donde los apellidos o el nombre com&uacute;n contiene la
     subcadena $persona. Este ejemplo usa un filtro booleano para
     indicar al servidor que busque la informaci&oacute;n en m&aacute;s de un atributo.

     <example>
      <title>B&uacute;squeda LDAP</title>
<programlisting role="php">
// $ds es un identificador de conexi&oacute;n v&aacute;lido

// $persona es todo o parte del nombre de una persona, por ejemplo "Pe"

$dn = "o=Mi Compa&ntilde;&iacute;a, c=ES";
$filtro="(|(sn=$persona*)(givenname=$persona*))";
$solonecesito = array( "ou", "sn", "givenname", "mail");

$sr=ldap_search($ds, $dn, $filtro, $solonecesito);

$info = ldap_get_entries($ds, $sr);

print $info["count"]." entradas devueltas&lt;p>";
</programlisting>
      </example></para>

   </refsect1>
  </refentry>


  <refentry id="function.ldap-unbind">
   <refnamediv>
    <refname>ldap_unbind</refname>
    <refpurpose>Hace logout de un directorio LDAP</refpurpose>
   </refnamediv>
   <refsect1>
    <title>Descripci&oacute;n</title>
     <methodsynopsis>
     <type>int</type><methodname>ldap_unbind</methodname>
     <methodparam><type>int</type><parameter>identificador_de_conexion</parameter></methodparam>
     </methodsynopsis>
    <para>
     Devuelve verdadero cuando finaliza correctamente y falso se produce un error.
    </para>  
    <para>
     La funci&oacute;n <function>ldap_unbind</function> hace logout, desautentifica
     de un directorio LDAP.</para>
   </refsect1>
  </refentry>

  <refentry id="function.ldap-err2str">
   <refnamediv>
    <refname>ldap_err2str</refname>
    <refpurpose>
     Convierte un c&oacute;digo num&eacute;rico de error LDAP en un mensaje.
    </refpurpose>
   </refnamediv>
   <refsect1>
    <title>Descripci&oacute;n</title>
     <methodsynopsis>
     <type>string</type><methodname>ldap_err2str</methodname>
     <methodparam><type>int</type><parameter>numerr</parameter></methodparam>
     </methodsynopsis>
    <para>
     Devuelve una cadena con el mensaje de error.</para>
    <para>
     Esta funci&oacute;n devuelve una cadena con el mensaje de error
     explicativo del c&oacute;digo num&eacute;rico de error numerr. Aunque los
     c&oacute;digos de error LDAP est&aacute;n estandarizados, diferentes librer&iacute;as
     devuelven mensajes textuales de error diferentes o incluso
     localizados. Nunca se debe comprobar la existencia de un error
     espec&iacute;fico por el mensaje textual, sino por el c&oacute;digo num&eacute;rico.</para>
    <para>
     Var tambi&eacute;n <function>ldap_errno</function> y
     <function>ldap_error</function>.

    <example>
     <title>Enumerando todos los mensajes de error LDAP</title>
<programlisting role="php">
&lt;?php
  for($i=0; $i<100; $i++) {
    printf("Error $i: %s&lt;br>\n", ldap_str2err($i));
  }
?>
</programlisting>
    </example></para>
   </refsect1>
  </refentry>

  <refentry id="function.ldap-errno">
   <refnamediv>
    <refname>ldap_errno</refname>
    <refpurpose>
     Devuelve el c&oacute;digo num&eacute;rico de error para el &uacute;ltimo
     comando LDAP.
    </refpurpose>
   </refnamediv>
   <refsect1>
    <title>Descripci&oacute;n</title>
     <methodsynopsis>
     <type>int</type><methodname>ldap_errno</methodname>
     <methodparam><type>int</type><parameter>identificador_de_conexi&oacute;n</parameter></methodparam>
     </methodsynopsis>
    <para>
     Devuelve el c&oacute;digo de error del &uacute;ltimo comando LDAP para la conexi&oacute;n
     especificada.</para>
    <para>
     Esta funci&oacute;n devuelve el c&oacute;digo num&eacute;rico de error, que est&aacute; estandarizado,
     producido por el &uacute;ltimo comando LDAP y en la conexi&oacute;n especificada.
     Este n&uacute;mero puede ser convertido en un mensaje textual de error usando
     <function>ldap_err2str</function>.</para>
    <para>
     A menos que decremente el nivel de alerta en su fichero
     <filename>php3.ini</filename> (&oacute; <filename>php.ini</filename>)
     o anteponga a los comandos LDAP en s&iacute;mbolo @ (arroba) para
     suprimir las alertas y warnings, los errores producidos ser&aacute;n
     mostrados autom&aacute;ticamente en el c&oacute;digo HTML generado.
     <example>
      <title>Generando y capturando un error</title>
<programlisting role="php">
&lt;?php
// Este ejemplo contiene un error, que ser&aacute; capturado.
$ld = ldap_connect("localhost");
$bind = ldap_bind($ld);
// error de sintaxis en la expresi&oacute;n del filtro (codigo
// de error 87). Deber&iacute;a ser "objectclass=*".
$res =  @ldap_search($ld, "o=Mi Compa&ntilde;&iacute;a, c=ES", "objectclass");
if (!$res) {
    printf("LDAP-C&oacute;digo  Error: %s&lt;br>\n", ldap_errno($ld));
    printf("LDAP-Mensaje Error: %s&lt;br>\n", ldap_error($ld));
    die("Argh!&lt;br>\n");
}
$info = ldap_get_entries($ld, $res);
printf("%d entradas encontradas.&lt;br>\n", $info["count"]);
?>
</programlisting>
    </example></para>
    <para>
     Ver tambi&eacute;n <function>ldap_err2str</function> y
     <function>ldap_error</function>.</para>
   </refsect1>
  </refentry>
  
  <refentry id="function.ldap-error">
   <refnamediv>
    <refname>ldap_error</refname>
    <refpurpose>
     Devuelte el mensaje de error del &uacute;ltimo comando LDAP
    </refpurpose>
   </refnamediv>
   <refsect1>
    <title>Descripci&oacute;n</title>
     <methodsynopsis>
     <type>string</type><methodname>ldap_error</methodname>
     <methodparam><type>int</type><parameter>identificador_de_conexi&oacute;n</parameter></methodparam>
     </methodsynopsis>
    <para>
     Devuelve una cadena con el mensaje de error.</para>
    <para>
     Esta funci&oacute;n devuelve una cadena con el mensaje de error
     explicativo del error generado por el &uacute;ltimo comando LDAP
     en la conexi&oacute;n especificada.  Aunque los
     c&oacute;digos de error LDAP est&aacute;n estandarizados, diferentes librer&iacute;as
     devuelven mensajes textuales de error diferentes o incluso
     localizados. Nunca se debe comprobar la existencia de un error
     espec&iacute;fico por el mensaje textual, sino por el c&oacute;digo num&eacute;rico.</para>
    <para>
     A menos que decremente el nivel de alerta en su fichero
     <filename>php3.ini</filename> (&oacute; <filename>php.ini</filename>)
     o anteponga a los comandos LDAP en s&iacute;mbolo @ (arroba) para
     suprimir las alertas y warnings, los errores producidos ser&aacute;n
     mostrados autom&aacute;ticamente en el c&oacute;digo HTML generado.</para>
    <para>
     Ver tambi&eacute;n <function>ldap_err2str</function> y
     <function>ldap_errno</function>.</para>
   </refsect1>
  </refentry>
 </reference>

<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"../../manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
-->