Prawdopodobna przyczyna
systemy Windows, które nie mają php_com_dotnet.dll załadowany (sprawdź swój plik php.ini), jak również systemów innych niż Okna, nie będzie w stanie wykorzystać com_create_guid().
Rozwiązanie
I zmontowane i modyfikowane następujący kod jako kulminacji niektóre z moich własnych pomysłów i zmian (takich jak wsparcie nawiasów całej) oraz licznych propozycji z wielu źródeł na realizację przekrój platformy i krzyż Funkcja wersji PHP, która obsługuje usztywnione i nieuzbrojone tworzenie UID. Określanie false w wywołaniu funkcji zwróci UID zapakowany w nawiasy klamrowe ("styl Windows"). Podając true lub nic zwróci UID bez nawiasy klamrowe.
kompatybilności
PHP z góry wersji 4.2 jest obsługiwany. To jest agnostyka systemu operacyjnego i wybierze "najlepszą" metodę opartą na systemie operacyjnym, wersji PHP i dostępnych bibliotekach PHP/funkcje (w tym wywołanie opcji rezerwowej, jeśli biblioteka dotnet nie jest załadowana w systemie Windows PHP).
Kodeks
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;
}
}
Wykorzystanie
$newGUID = GUIDv4([false]); // false for braces, true or nothing for no braces
Więcej informacji
http://php.net/manual/en/function.com-create-guid.php
http://php.net/manual/en/com.installation.php
http://guid.us/GUID/PHP
Albo twój zdalny serwer nie jest uruchomiony PHP 5, albo to z systemem Linux, a następnie nie można używać rozszerzenia COM. –