Nguyên nhân = php_com_dotnet.dll gốc có khả năng
Hệ thống Windows không có tệp php_com_dotnet.dll được tải (kiểm tra tệp php.ini của bạn), cũng như các hệ thống không phải của Windows, sẽ không thể sử dụng com_create_guid().
Giải pháp
tôi lắp ráp và sửa đổi các mã sau đây như là kết quả một số ý tưởng của riêng tôi và những thay đổi (ví dụ như hỗ trợ cú đúp trong suốt), và rất nhiều lời đề nghị từ nhiều nguồn khác nhau để thực hiện một nền tảng chéo và chéo Chức năng phiên bản PHP hỗ trợ tạo UID đã được tạo và không bị bẻ cong. Chỉ định false trong cuộc gọi hàm sẽ trả về một UID được bọc trong niềng răng ("Kiểu Windows"). Chỉ định đúng hoặc không có gì sẽ trả lại UID không có dấu ngoặc ôm.
Compatibility
PHP từ phiên bản 4.2 trở lên được hỗ trợ. Nó là hệ điều hành bất khả tri và sẽ chọn phương thức "tốt nhất" dựa trên hệ điều hành, phiên bản PHP và các thư viện/chức năng PHP có sẵn (bao gồm gọi một tùy chọn dự phòng nếu thư viện dotnet không được nạp trong PHP Windows).
Bộ luật
function GUIDv4 ($trim = true)
{
$lbrace = chr(123); // "{"
$rbrace = chr(125); // "}"
// Windows
if (function_exists('com_create_guid') === true)
{ // extension=php_com_dotnet.dll
if ($trim === true)
{
return trim(com_create_guid(), '{}');
}
else
{
return com_create_guid();
}
}
// OSX/Linux and Windows with OpenSSL but without com classes loaded (extension=php_com_dotnet.dll loaded in php.ini)
if (function_exists('openssl_random_pseudo_bytes') === true)
{
$data = openssl_random_pseudo_bytes(16);
$data[6] = chr(ord($data[6]) & 0x0f | 0x40); // set version to 0100
$data[8] = chr(ord($data[8]) & 0x3f | 0x80); // set bits 6-7 to 10
if ($trim === true)
{
return vsprintf('%s%s-%s-%s-%s-%s%s%s', str_split(bin2hex($data), 4));
}
else
{
return $lbrace.vsprintf('%s%s-%s-%s-%s-%s%s%s', str_split(bin2hex($data), 4)).$rbrace;
}
}
// Fallback (PHP 4.2+)
mt_srand((double)microtime() * 10000);
$charid = strtolower(md5(uniqid(rand(), true)));
$hyphen = chr(45); // "-"
$guidv4 = substr($charid, 0, 8).$hyphen.
substr($charid, 8, 4).$hyphen.
substr($charid, 12, 4).$hyphen.
substr($charid, 16, 4).$hyphen.
substr($charid, 20, 12);
if ($trim === true)
{
return $guidv4;
}
else
{
return $lbrace.$guidv4.$rbrace;
}
}
Cách sử dụng
$newGUID = GUIDv4([false]); // false for braces, true or nothing for no braces
biết thêm thông tin
http://php.net/manual/en/function.com-create-guid.php
http://php.net/manual/en/com.installation.php
http://guid.us/GUID/PHP
Nguồn
2016-12-06 11:19:18
Hoặc máy chủ từ xa của bạn không chạy PHP 5, hoặc nó đang chạy Linux và sau đó bạn không thể sử dụng các phần mở rộng COM. –