使用com_create_guid()
在php file.i'm中生成guid。它在localhost上工作正常但我在远程服务器上显示以下错误。
致命错误:在第6行调用未定义的函数com_create_guid()
我的代码是(guid part nly)
$guid = com_create_guid();
echo $guid;
任何想法
答案 0 :(得分:37)
您可以手动创建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;
如下:
答案 1 :(得分:8)
要扩展上面的部分正确答案:
取自http://php.net/manual/en/com.installation.php
“从PHP 5.4.5开始,COM和DOTNET不再内置到php核心。你必须在php.ini中添加COM支持”
延长= php_com_dotnet.dll
答案 2 :(得分:1)
您必须运行小于5的PHP版本,否则您必须在LINUX框上运行,因为COM是基于Windows的扩展。
尝试使用此脚本并确保。
if (function_exists('com_create_guid') === true)
{
echo "Yes";
$guid = com_create_guid();
echo $guid;
}
else{
echo "Nope !";
}
答案 3 :(得分:1)
可能的根本原因
未加载php_com_dotnet.dll的Windows系统(检查您的php.ini文件)以及非Windows系统将无法使用 com_create_guid()。
解决方案
我组装并修改了以下代码,作为我自己的一些想法和变化(例如整个大括号支持)的高潮,以及来自多个来源的众多建议,用于实现跨平台和交叉PHP版本功能,支持支撑和非支持UID创建。在函数调用中指定 false 将返回用大括号包装的UID(“Windows样式”)。指定 true 或什么都不会返回没有大括号的UID。
<强>兼容性强>
支持4.2版本以上的PHP。它与操作系统无关,将选择基于操作系统,PHP版本的“最佳”方法以及可用的PHP库/函数(如果未在PHP Windows中加载dotnet库,则调用回退选项)。
守则
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