Функция com_create_guid() получила ошибку на стороне сервера, но отлично работает в локальной сети, используя php

работает над созданием guid в файле php.i'm с помощью com_create_guid(). Он отлично работает на localhost, но я вижу ошибку ниже на удаленном сервере.

Неустранимая ошибка: вызов функции undefined функции com_create_guid() в строке 6

мой код (guid part nly)

$guid = com_create_guid();
 echo $guid;

любые идеи

Ответы

Ответ 1

Вы можете создать 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://guid.us/GUID/PHP

http://php.net/manual/en/function.com-create-guid.php

Ответ 2

Чтобы продлить частично правильные ответы выше:

взято из http://php.net/manual/en/com.installation.php

"Из PHP 5.4.5 COM и DOTNET больше не встроены в ядро ​​php. Вы должны добавить поддержку COM в php.ini"

расширение = php_com_dotnet.dll

Ответ 3

Вы должны запустить версию PHP меньше 5, иначе вы должны работать в окне LINUX, поскольку COM - расширение на основе Windows.

Попробуйте это script и убедитесь, что.

if (function_exists('com_create_guid') === true)
    {
        echo "Yes";
        $guid = com_create_guid();
        echo $guid;
    }
else{
    echo "Nope !";
}

Ответ 4

Вероятная корневая причина

В системах 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

http://php.net/manual/en/com.installation.php

http://guid.us/GUID/PHP