2013-08-13 17 views
16

làm việc trên tạo ra một guid trong một tập tin php. Tôi đang sử dụng com_create_guid(). Nó hoạt động tốt trên localhost nhưng tôi cho thấy lỗi dưới đây trong máy chủ từ xa.com_create_guid() chức năng có lỗi trên phía máy chủ nhưng hoạt động tốt trong địa phương sử dụng php

Fatal error:Call to undefined function com_create_guid() on line 6

mã của tôi là (guid phần nly)

$guid = com_create_guid(); 
echo $guid; 

bất kỳ ý tưởng

+3

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. –

Trả lời

28

Bạn có thể tạo GUIDs bằng tay:

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; 
    } 
} 

Cách sử dụng:

$GUID = getGUID(); 
echo $GUID; 

Thực hiện theo:

http://guid.us/GUID/PHP

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

+1

Tôi đã thử điều này với 5 triệu id mỗi lần và 5 lần và không nhận được bất kỳ bản sao nào, vì vậy tôi cho rằng điều này là đủ tốt để sử dụng cho doanh nghiệp. – AaA

+0

Bạn có thể sử dụng thực tế thay vào đó: sprintf ('% 04X% 04X-% 04X-% 04X-% 04X-% 04X% 04X% 04X', mt_rand (0, 65535), mt_rand (0, 65535), mt_rand (0, 65535), mt_rand (16384, 20479), mt_rand (32768, 49151), mt_rand (0, 65535), mt_rand (0, 65535), mt_rand (0, 65535)); nó là phương pháp giống hệt được sử dụng trong com_create_guid(); –

+0

mt_rand giống của bạn nhưng sau đó chỉ sử dụng rand. –

1

Bạn phải chạy PHP phiên bản nhỏ hơn 5 khác mà bạn phải được chạy trên một hộp LINUX như COM là một cửa sổ dựa mở rộng.

Hãy thử tập lệnh này và đảm bảo.

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

Để mở rộng câu trả lời phần nào đúng trên:.

lấy từ http://php.net/manual/en/com.installation.php

"Từ PHP 5.4.5, COM và DotNet không còn được xây dựng vào lõi php Bạn phải bổ sung COM hỗ trợ trong php.ini"

mở rộng

+0

Áp dụng 'extension = php_com_dotnet.dll' dường như chỉ hoạt động trong Windows Server, không phải trong Linux (Ubuntu 14) được phát hành [* here *] (https://www.drupal.org/node/2614202) – hyip

0

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

Các vấn đề liên quan