为啥 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 库函数会消失?的主要内容,如果未能解决你的问题,请参考以下文章

C语言为啥可以重写标准库函数?

为啥说,信号处理函数里面不要用printf等库函数

为啥我的链表内容在退出函数时会消失?

php中mysqli函数库常用函数

php中浮点数计算问题

为啥某些 Swift 标准库函数在 Playground 中无法识别?