khcegodk / ldap
使LDAP在PHP中使用更简单、更实用
Requires
- php: >=5.3.3
- ext-ldap: *
Requires (Dev)
- phpunit/phpunit: >=3.7.13
This package is not auto-updated.
Last update: 2024-09-29 04:49:29 UTC
README
安装
在您的项目中安装组件与安装Composer一样简单(如果尚未完成)。
然后,在您的项目根目录下创建一个新的文件,命名为 composer.json,并将以下内容粘贴到其中
{
"require": {
"khcegodk/ldap": "dev-master"
}
}
要选择组件名称和版本,您应参考在Packagist上找到的信息
然后,您就可以下载所有供应商库并生成自动加载配置文件了
$ php composer.phar install
从那里开始,加载 Ldap 组件类以及任何在您的 composer.json 配置中支持的包,只需在脚本顶部添加以下代码即可
require_once '/path/to/project/vendor/autoload.php';
用法
连接 & 绑定
连接到 LDAP 的典型顺序不仅包括与服务器建立连接,还包括绑定用户。这可以通过以下方式进行
<?php
use Toyota\Component\Ldap\Core\Manager;
use Toyota\Component\Ldap\Platform\Native\Driver;
$params = array(
'hostname' => 'ldap.example.com',
'base_dn' => 'dc=example,dc=com'
);
$manager = new Manager($params, new Driver());
$manager->connect();
// Anonymous binding
$manager->bind();
// Ready for searching & persisting information
大多数情况下,您必须使用具有特权的用户来绑定到 LDAP,以便执行持久性操作
$manager->bind('cn=user,dc=example,dc=com', 'myTopSecretPassword');
连接参数
我们在连接和绑定介绍中看到了一组最小的参数。然而,还有许多配置选项可用
- hostname: LDAP 服务器的主机名(FQDN)
- port: 在 LDAP 服务器上连接到的端口(默认为 389 用于常规连接,636 用于 SSL 连接)
- security: SSL 或 TLS 之一。当未设置安全性时,连接将是一个普通连接
- bind_dn: 默认的区分名称用于绑定(在这种情况下,$manager->bind() 将不再是匿名的)
- bind_password: 默认密码用于绑定
- options: 默认启用连接的 LDAP 选项(请参阅 Toyota\Component\Ldap\API\ConnectionInterface)
错误处理
所有 Ldap 错误代码和消息都通过方便的异常处理,这些异常通常很麻烦追踪(并且很容易忘记)。
因此,例如,您可以编写以下内容
<?php
// ... namespace imports and $params configuration
$manager = new Manager($params, new Driver());
try {
$manager->connect();
} catch (ConnectionException $e) {
// Do something about it
}
try {
$manager->bind();
} catch (BindingException $e) {
// Do something about it
}
// ...
所有可用的异常都位于 Toyota\Component\Ldap\Exception 命名空间中
搜索 LDAP
最基本和最复杂的搜索都通过一个独特的 API 处理。这是 ldap_read 或 ldap_list 或 ldap_search 两难困境的终结
<?php
// ... $manager connection & binding
$results = $manager->search(Search::SCOPE_ALL, 'ou=comp,dc=example,dc=com', '(objectclass=*)');
// A search result instance is retrieved which provides iteration capability for a convenient use
foreach ($results as $node) {
echo $node->getDn();
foreach ($node->getAttributes() as $attribute) {
echo sprintf('%s => %s', $attribute->getName(), implode(',', $attribute->getValues()));
}
}
SCOPE_ALL 将允许您搜索包括您提供的区分名称的基节点在内的整个子树。其他选项包括
- SCOPE_BASE: 仅搜索与给定的区分名称匹配的一个节点
- SCOPE_ONE: 搜索与给定的区分名称匹配的节点下的节点
为了方便起见,组件还提供了一个直接的方法,当您知道其区分名称时,可以检索一个节点
<?php
$node = $manager->getNode('cn=my,ou=node,dc=example,dc=com');
将信息持久保存到 LDAP
忘记所有 ldap_mod_add、ldap_mod_del、ldap_mod_replace、ldap_add 和 ldap_delete。现在您需要记住的只有 save() 和 delete()。组件将跟踪您对 LDAP 条目的所有更改,并将自动发出适当的函数调用以在目录中仅执行这些更改
<?php
$node = $manager->getNode('cn=node,ou=to,ou=update,dc=example,dc=com');
$node->get('username')->set('test_user');
$node->get('objectClass')->add('inetOrgPerson');
$node->get('sn')->set('Doe');
$node->removeAttribute('whatever');
$manager->save($node);
// Update done
$node = new Node()
$node->setDn('ou=create',dc=example,dc=com');
$node->get('objectClass', true)->add(array('top', 'organizationalUnit'));
// The true param creates the attribute on the fly
$node->get('ou', true)->set('create');
$manager->save($node);
// New Ldap entry saved
$manager->delete($node);
// Now it's gone
资源
要运行测试套件,请从 github 将项目克隆到您的开发环境中,从分发的版本开始打包自己的 autoload.php 和 phpunit.xml。您就可以开始了
$ php composer.phar install --dev
$ vendor/bin/phpunit
关于
要求
- PHP >= 5.3.3 且具有 ldap 扩展
- Composer
许可证
tiesa Ldap 组件采用 MIT 许可协议 - 详细信息请参阅 LICENSE 文件