在PHP中使用UUID擴充套件的函式

2022-05-31 01:18:09 字數 4171 閱讀 2480

環境:

centos linux release 7.7.1908 (core)

php 7.3.11

uuid extention 1.0.4

感覺上php對uuid的支援似乎不是很上心,pecl中的uuid擴充套件僅僅是對libuuid的打包,並沒有像其他語言那樣直接提供完整的uuid實現。由於libuuid僅僅提供了版本1和版本4的uuid,所以……,開心一點,這兩個就夠用了。

uuid_create( [int $uuid_type = uuid_type_default] ) : string

$uuid_type

如下常量之一:

uuid_type_default    //

0uuid_type_time       //

1uuid_type_dce        //

4uuid_type_name       //

1uuid_type_random     //

4libuuid提供了uuid版本1和版本4的實現,也只定義了 uuid_type_dce_time 和 uuid_type_dce_random 兩個常量。php的uuid擴充套件中,常量是通過對映libuuid的常量定義的。所以,雖然擴充套件中根據uuid標準定義了4個常量名,但對於當前版本的libuuid,也只能對映到兩個常量。 uuid_type_time 對映為libuuid的常量 uuid_type_dce_time ,對應uuid版本1的實現; uuid_type_random 對映為libuuid的常量 uuid_type_dce_random ,對應uuid版本4的實現。而 uuid_type_dce 和 uuid_type_name 兩個常量,雖然從常量名上很容易看出是對應著uuid的版本2和版本3、5,但目前也只能對映為libuuid的常量 uuid_type_dce_random 和 uuid_type_dce_time ,可以使用但不具有實際意義。

常量 uuid_type_default 為預設值,表示了libuuid的預設選擇。預設情況下,如果系統存在高質量的隨機數(比如/dev/urandom或/dev/random可用),則提供版本4的uuid,否則提供版本1的uuid。一般認為版本1的uuid發生重複的概率更小,近乎可以保證真正的唯一性,但考慮到洩露mac帶來的安全憂慮,大多數時候還是傾向於採用版本4的uuid。

return

如果引數有效(0、1或4),返回uuid字串。

如果引數不能識別,丟擲警告資訊並返回預設的uuid字串。

uuid_is_valid( string

$uuid ) : bool

$uuid

待測試的uuid字串。

return

返回true或false。$uuid對大小寫不敏感。

uuid_compare(string

$uuid1, string

$uuid2) : int

$uuid1

,  $uuid2

待比較的uuid字串。

returen

如果 $uuid1

或 $uuid2

不是有效的uuid字串,返回bool值 false

。如果 $uuid1

和 $uui2

不相同: $uuid1 

< $uuid2

,則返回乙個正整數; $uuid1 > $uuid2

,則返回乙個負整數。

如果 $uuid1 = $uuid2

,返回整型值0。

uuid_is_null(string

$uuid) : bool

$uuid

待測試的uuid字串。

return

如果 $uuid

不是有效的uuid字串,返回 false

。如果 $uuid

不是null uuid字串,返回 false

。如果 $uuid

是null uuid字串,返回 true

null uuid

'00000000-0000-0000-0000-000000000000'這個各位均為0的uuid字串被稱為null uuid(或nil uuid?)。

uuid_type(string

$uuid) : int

$uuid

待測試的uuid字串。

return

如果 $uuid

不是有效的uuid字串,返回bool值 false

。如果 $uuid

是null uuid,返回整型值-1。

如果 $uuid

是有效的uuid字串,返回1,2,3,4或5,對應uuid的版本。

uuid_variant(string

$uuid) : int

$uuid

待測試的uuid字串。

return

如果 $uuid

不是有效的uuid字串,返回bool型別值 false

。如果 $uuid

是null uuid,返回整型值-1。

如果 $uuid

是有效的uuid字串,返回整型值0,1,2或3。

根據libuuid定義的常量名,很容易分辨返回值的含義:

uuid_variant_ncs          //0 

uuid_variant_dce          //1 

uuid_variant_microsoft    //2 

uuid_variant_other        //3 

uuid_time(string

$uuid) : int

$uuid

待解析的uuid字串。

return

如果 $uuid

不是有效的uuid字串,如果 $uuid

不是rfc4122定義的變體(uuid_variant()返回值為1,在libuuid中預定義的常量為 uuid_variant_dce ),如果 $uuid

不是版本1的uuid(基於時間的uuid),則返回bool值 false

。如果 $uuid

是根據rfc4122定義的版本1構造的uuid,返回乙個整型值。這個值就是構造uuid字串的時候使用的unix時間戳。

uuid_mac(string

$uuid) : string

$uuid

待解析的uuid字串。

return

如果 $uuid

不是有效的uuid字串,如果 $uuid

不是rfc4122定義的變體(uuid_variant()返回值為1,在libuuid中預定義的常量為 uuid_variant_dce ),如果 $uuid

不是版本1的uuid(基於時間的uuid),則返回bool值 false

。如果構造 $uuid

的時候使用的不是有效的mac位址,則返回bool值 false

。如果 $uuid

是根據rfc4122定義的版本1構造的uuid,並且構造 $uuid

時使用的是有效的mac位址,則返回這個mac位址,表示為乙個12位的16進製制字串。

uuid_parse(string

$uuid) : string

$uuid

待打包的uuid字串。

return

如果 $uuid

不是有效的uuid字串,返回bool值 false

。如果 $uuid

是有效的uuid字串,則去除「-」後打包成乙個16位長的高位在前二進位制字串並返回。類似php中函式pack('l*')的效果。

uuid_unparse(string

$uuid) : string

函式uuid_parse()的反向過程。如果引數資料有效,則返回乙個uuid字串,否則返回bool值 false

。ok,就這些。希望有幫助。

參考:

在php中使用Sphinx

要使用php連線sphinx進行全文搜尋,有兩種方式 將sphinx作為php擴充套件安裝,這種方式比較麻煩,此處不介紹 在sphinx原始碼目錄下的有個api sphinxapi.php,將此檔案reqire到你的php中,即可呼叫api方法進行全文搜尋 require sphinxapi.php...

在PHP中使用Curl

摘要 在這篇文章中主要講解php curl庫的知識,並教你如何更好的使用php curl。簡介你可能在你的編寫php指令碼 中會遇到這樣的問 題 怎麼樣才能從其他站點獲取內容呢?這裡有幾個解決方式 最簡單的就是在php中使用fopen 函式,但是fopen函式沒有足夠的引數來使用,比 如當你想構建乙...

PHP中使用hidef擴充套件代替define提高效能

需要新加乙個常量,開啟了本地的config.php檔案,想到了幾年前測試過的hidef以及apc提公升define效能的方案。我的程式中有對開發 測試 生產伺服器分別做了不同的配置,在常量方面則使用了乙個陣列定義了所有需要定義的常量,然後檢測是否有apc load constants函式,沒有的話,...