PHP解決LDAP中objectGUID亂碼的問題

2021-09-14 00:20:23 字數 1357 閱讀 1318

php 中正確處理 objectguid 的方式:

function guidtostr($binary_guid)
函式unpack ( string $format , string $data [, int $offset = 0 ] ) : array

作用:從二進位制字串中解壓資料。

第乙個引數$format,指定解包時使用的格式。詳細請查閱 手冊

第二個引數$data,待解包的二進位制資料

guid 本質上是乙個16位元組(128位)的二進位制資料:位位元組

描述位元組序324

資料1原生162

資料2原生162

資料3原生328

資料4大端序

其通常會寫成 十六進製制 的字串,如:3f2504e0-4f89-11d3-9a0c-0305e82c3301

按照該規則,對$format進行選用:

v:無符號長整型(32位,小端位元組序)

v:無符號短整型(16位,小端位元組序)

n:無符號短整型(16位,大端位元組序)

n:無符號長整型(32位,大端位元組序)

$unpacked = unpack('va/v2b/n2c/nd', $binary_guid);
v 後的 a 是 unpack 返回結果中的索引值,

v2b 表示第二段資料解析為兩個,索引值分別為b1b2

n2c,nd 也是一樣的

$unpacked = [

"a" => 1059390688

"b1" => 20361

"b2" => 4563

"c1" => 39436

"c2" => 773

"d" => 3895210753

]

對解包後資料進行格式化:

$guid = sprintf('%08x-%04x-%04x-%04x-%04x%08x', 

$unpacked['a'], $unpacked['b1'], $unpacked['b2'], $unpacked['c1'], $unpacked['c2'], $unpacked['d'];

%08x$unpacked['a']轉為 8位的十六進製制,長度不夠時,前面補零。

如:773轉為十六進製制為305%04x則格式化為0305

用Php如何操作LDAP

1 ldap是什麼 ldap是乙個用來發布目錄資訊到許多不同資源的協議。通常它都作為乙個集中的位址本使用,不過根據組織者的需要,它可以做得更加強大。ldap最基本的形式是乙個連線資料庫的標準方式。該資料庫為讀查詢作了優化。因此它可以很快地得到查詢結果,不過在其它方面,例如更新,就慢得多。要特別注意的...

php怎麼訪問ldap,用PHP如何操作LDAP

1 ldap是什麼 ldap是乙個用來發布目錄資訊到許多不同資源的協議。通常它都作為乙個集中的位址本使用,不過根據組織者的需要,它可以做得更加強大。ldap最基本的形式是乙個連線資料庫的標準方式。該資料庫為讀查詢作了優化。因此它可以很快地得到查詢結果,不過在其它方面,例如更新,就慢得多。要非凡注重的...

Windows下配置PHP支援LDAP擴充套件方法

載入php ldap模組 呼叫ldap時,報錯資訊 php fatal error uncaught error call to undefined function ldap connect 如何解決這個問題呢?以下是解決問題的過程,僅供參考 1 在php.ini檔案裡面找到 extension ...