работая над созданием guid в com_create_guid()
php.i'm с помощью com_create_guid()
. Он отлично работает на localhost, но я вижу ошибку ниже на удаленном сервере.
Неустранимая ошибка: вызов функции undefined com_create_guid () в строке 6
мой код (guid part nly)
$guid = com_create_guid(); echo $guid;
есть идеи
Вы можете создавать GUID вручную:
function getGUID(){ if (function_exists('com_create_guid')){ return com_create_guid(); } else { mt_srand((double)microtime()*10000);//optional for php 4.2.0 and up. $charid = strtoupper(md5(uniqid(rand(), true))); $hyphen = chr(45);// "-" $uuid = chr(123)// "{" .substr($charid, 0, 8).$hyphen .substr($charid, 8, 4).$hyphen .substr($charid,12, 4).$hyphen .substr($charid,16, 4).$hyphen .substr($charid,20,12) .chr(125);// "}" return $uuid; } }
Применение:
$GUID = getGUID(); echo $GUID;
Следить:
Чтобы расширить частично правильные ответы выше:
взято из http://php.net/manual/en/com.installation.php
«Из PHP 5.4.5 COM и DOTNET больше не встроены в ядро php. Вы должны добавить поддержку COM в php.ini"
расширение = php_com_dotnet.dll
Вы должны запустить версию PHP менее 5, иначе вы должны работать в окне LINUX, поскольку COM – расширение на основе Windows.
Попробуйте этот скрипт и убедитесь.
if (function_exists('com_create_guid') === true) { echo "Yes"; $guid = com_create_guid(); echo $guid; } else{ echo "Nope !"; }
Вероятная корневая причина
В системах Windows, у которых нет загруженного php_com_dotnet.dll (проверьте файл php.ini), а также не Windows-системы, использовать com_create_guid () невозможно .
Решение
Я собрал и модифицировал следующий код как кульминацию некоторых моих собственных идей и изменений (таких как поддержка скобок), а также многочисленные предложения из нескольких источников для реализации кросс-платформенной и кросс-функции PHP-версии, которая поддерживает скоординированное и не привязанное создание UID , Задание false в вызове функции возвращает UID, завернутый в фигурные скобки («стиль Windows»). Указание true или ничего не вернет UID без брекетов.
Совместимость
Поддерживается PHP от версии 4.2 вверх. Это не зависит от ОС и выберет «лучший» метод на основе ОС, версии PHP и какие библиотеки / функции PHP будут доступны (в том числе вызов альтернативной опции, если библиотека dotnet не загружена в PHP Windows).
Код
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; } }
Применение
$newGUID = GUIDv4([false]); // false for braces, true or nothing for no braces
Больше информации
http://php.net/manual/en/function.com-create-guid.php