【问题标题】:Display thumbnailPhoto from Active Directory in PHP在 PHP 中显示来自 Active Directory 的缩略图照片
【发布时间】:2013-06-05 10:44:32
【问题描述】:

我已经设置了一个系统来显示来自 Active Directory 的每个人的姓名、电子邮件地址和电话号码,但是我无法让“thumbailPhoto”工作。

我在互联网上四处搜索,但无法找到这是否可行,或者至少找不到从 Active Directory 返回的格式。

我目前正在使用 adldap 类,所以如果可以使用它,那将是理想的。

提前致谢。

编辑:

我可以检索 thumbnailPhoto 属性中的数据,如果我将它们直接转储到浏览器,我会得到如下信息:

ÿØÿàJFIFððÿá PExifII*bh~†(2Ži‡¢XCanonCanon EOS 5D Mark IIIðð2013:05:19 17:35:31š‚à‚è"ˆ'ˆ 0230ð’ ' ' ('0'8' ' '@''11''11 0100 ÿÿ¢H¢P¢¤¤¤¤ 2013:04:17 11:44:522013:04:17 11:44:52H¹o@B¬† è»dnäWµ~:̦®(¶’ HHÿØÿàJFIFÿÛC $。 ",#(7),01444'9=82<.342>456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š'“”•–~™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãääåæçèéêñòÄóôõö÷øùùúÿ ÿĵw!1AQaq"2B'¡±Á #3RðbrÑ $4á%ñ&'()

这还不是全部,但它是一个很长的字符串,我假设是某种二进制字符串?

【问题讨论】:

  • 我假设您可以检索“thumbnailPhoto”的内容。你分析过内容是什么图片格式吗?
  • 我添加了一个返回的 sn-p。关于图像格式,当用户添加图像时,我不知道 Active Directory 对图像做了什么。我不知道它是否保持他们上传的格式,或者是否以某种方式处理。

标签: php active-directory ldap adldap


【解决方案1】:

这似乎是一个 JPEG 文件,因此您应该能够将该数据与适当的 mime 类型一起发送到浏览器。应该可以使用以下内容输出该图像:

<img src="data:image/jpeg;base64,<?php echo base64_encode($imageString); ?>"/>

但也可以将任何图像格式的文件保存到thumbnailPhoto 属性中。因此,我会将内容放入一个临时文件中,然后直接从服务器提供该文件。您需要通过 finfo 传递文件以获得正确的 mime-type。

所以你可以这样做:

$tempFile = tempnam(sys_get_temp_dir(), 'image');
file_put_contents($tempFile, $imageString);
$finfo = new finfo(FILEINFO_MIME_TYPE);
$mime  = explode(';', $finfo->file($tempFile));
echo '<img src="data:' . $mime[0] . ';base64,' . base64_encode($imageString) . '"/>';

【讨论】:

  • 非常感谢,我稍微调整了代码,因为我知道这将是一个图像,但这绝对解决了我的问题并且效果很好。
  • 为了它的价值,我使用这个解决方案来解析 mime 类型,但能够使用 $finfo-&gt;buffer($binary) 跳过写入文件
【解决方案2】:

试试下面的代码。这是对上述答案的改编。

<?php $result = ldap_search($ad , $dn , $filter, $attributes); $aduser = ldap_get_attributes($ad, ldap_first_entry($ad,$result)); ?>

<img src="data:image/jpeg;base64,<?php echo base64_encode($aduser['thumbnailPhoto'][0]); ?>" />

【讨论】:

    【解决方案3】:

    当您将照片数据存储到 ldap 即“jpegphoto”属性时,应该使用编码 base64 来完成。 读取属性已经被即时解码。因此我会使用一些修改较少的代码

    $tempFile = tempnam(sys_get_temp_dir(), 'image');
    file_put_contents($tempFile, $imageString);
    $finfo = new finfo(FILEINFO_MIME_TYPE);
    $mime  = explode(';', $finfo->file($tempFile));
    header("Content-Type: $mime");
    echo $imageString;
    

    这是直接写php图片的例子 您可以直接在标签 img 下使用它,即

    <img src="example.php" />
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-11
      • 1970-01-01
      相关资源
      最近更新 更多