为啥 PHP 库函数会消失?
Posted
技术标签:
【中文标题】为啥 PHP 库函数会消失?【英文标题】:Why would a PHP library function vanish?为什么 PHP 库函数会消失? 【发布时间】:2020-10-23 15:22:33 【问题描述】:我接到一个小非营利组织的惊慌电话,告诉我用户无法再注册。我戳了一下表单处理器,发现它死在了这个 gem 上:
$uid = trim(com_create_guid(), '');
那行代码已经完成了 4 年的工作。我把它放到了页面中:
function_exists('com_create_guid')
...这告诉我它已经不存在了。从数据库中的日期来看,最后一次运行是 6 月 3 日(现在是 7 月 2 日)。我与 ISP 的支持人员取得了联系,经历了三个层次,直到我找到了一个真正的程序员。他让我更改 php 版本并启用一些可能的功能,但该功能仍然消失。从那以后,我转向了一种解决方法,但我想知道是否有人知道为什么这会简单地消失。 (而且我知道有人会问 ISP 是谁,所以我会注明是 GoDaddy。)
【问题讨论】:
这显然只是一个基于windows的功能,这是windows服务器吗?如果是这样,我想知道可能的 Windows 更新(在 .Net 领域)是否改变了一些东西。正在使用什么 PHP 版本?哎呀,我有 Windows 10,交互式 shell 说该函数不存在,而我有 PHP v7.1.1 ...我确实越过了this info at PHP,如果它可能有任何相关性。 我要注意我不是普通的 PHP 程序员。服务器是 GoDaddy 的,所以我无法回答有关它的问题。在技术人员的建议下,我尝试了版本 5 和 7。根据文档,两者都支持 com_create_guid。您的链接可能是我拥有的最好的信息。我去看看php.ini文件。 【参考方案1】:这里讨论了一个非常相似的问题:com_create_guid() function got error on server side but works fine in local using php
正如 cmets 中提到的,似乎 COM 扩展已被禁用或从 Windows 中删除。
尝试用PHP docs的那个替换
function guidv4()
if (function_exists('com_create_guid') === true)
return trim(com_create_guid(), '');
$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
return vsprintf('%s%s-%s-%s-%s-%s%s%s', str_split(bin2hex($data), 4));
【讨论】:
正如我在问题中指出的那样,我已经有了解决方法。另一种解决方法很有趣,但它没有回答为什么原始功能在 3-4 年后停止工作的问题。以上是关于为啥 PHP 库函数会消失?的主要内容,如果未能解决你的问题,请参考以下文章