【问题标题】:Entry field not available for recovery?输入字段不可恢复?
【发布时间】:2013-01-29 14:56:53
【问题描述】:

我正在使用 LDAP,出于某种奇怪的原因,我能够通过 PHP 恢复所有条目,但我无法获得 电话号码。它表现得好像是空的,但显然不是。

以下是相关代码:

$ds = ldap_connect($LDAP_SERVER);

$sr = ldap_search($ds, $LDAP_PEOPLE, "(|(cn=*$search*)(sn=*$search*)(gn=*$search*)(uid=*$search*)(mail=*$search*))", array('uid', 'sn', 'givenname', 'mail', 'telephoneNumber', 'o') );

ldap_sort($ds, $sr, $_GET['tri']);

foreach ($entries as $entry) {
    if (! isset($entry['uid'])) continue;

    $uid = $entry['uid'][0];
    $telnum = $entry['telephoneNumber'][0];
    if (! isset($entry['telephonenumber'])) continue; //THIS IS EVALUATED AS TRUE
...
}

如果错误以某种方式很明显,请原谅我。我已经为此工作了几个小时,但我是 LDAP 新手,适用于其他字段的方法似乎不适用于 telephonenumber。我知道 LDAP+telephone 上还有其他条目,但我没有找到一个似乎适合我的问题的条目。


编辑:

我发现 LDAP 管理器不允许访问某些字段,包括 电话号码。我不对授权负责。我向系统管理员发送了一个请求以更改授权。我认为它应该可以解决问题。我会及时向大家发布。谢谢。

【问题讨论】:

    标签: php ldap


    【解决方案1】:

    正在设置的数组项和具有值的数组项之间存在差异。

    例如:

    $array['test'] = "";
    if (!isset($array['test'])) //false
    if (empty($array['test'])) //true
    

    我想你的 LDAP 服务器总是返回一个电话号码,不管是否有值。

    你可以使用

    if (empty($entry['telephonenumber'])) continue;
    

    相反?

    尝试var_dump($entry['telephonenumber']) 并查看输出以查看$entry 的设置

    【讨论】:

    • 感谢您的及时回复佩斯。非常感谢。确实,我没听懂,谢谢提醒。 empty(...) 也被评估为 true。 var_dump 返回 NULL。
    • 你能确认empty($value)返回true,var_dump($variable) = NULL,但是isset($variable) = true?这似乎是一个矛盾。实际上只是在您的代码中发现了一个可能的错误,您应该检查$telnum = $entry['telephoneNumber'][0] 是否为空而不是数组,因为它不是空的,您只需从中读取[0]
    • 我确认空为真,var_dump 为空。但是,没有矛盾,因为 !isset 是真的。所以 isset 是错误的。感谢您的帮助佩斯。我想我找到了问题所在。我会把它作为答案发布在下面。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-16
    • 2020-10-27
    • 2020-12-27
    • 1970-01-01
    • 2012-12-11
    • 2019-06-14
    • 2016-12-30
    相关资源
    最近更新 更多