【问题标题】:Are PHP resource IDs unique?PHP 资源 ID 是否唯一?
【发布时间】:2010-07-29 09:21:45
【问题描述】:

每个 PHP 实例的 PHP 资源 ID 是否唯一?将各种资源转换为字符串是否会返回“Resource id #X”(其中X 是一些十进制数)?有没有返回资源ID的函数(我知道get_resource_type()获取资源类型,但没有找到类似get_resouce_id()的东西),还是必须这样做?

function get_resource_id($resource)
{
    return is_resource($resouce) 
           ? substr((string) $resource, 13 /* strlen("Resource id #") */)
           : NULL;
}

【问题讨论】:

  • 关于“Resource id #1”的结构 - PHP manual 确实声明:“不要依赖此结构;它可能会发生变化。”,因此您获取 ID 的方法是不推荐。
  • @w3d 不幸的是,我不知道有什么更好的(其他)方法来获取 ID。你呢?
  • 抱歉,不是这样!除了可能验证您确实返回了一个数字字符串,如果没有,则尝试另一种方法来获取 ID,例如。 '#' 上的 explode() 并获取第二个元素(如果存在)等。返回的字符串是否仅取决于 PHP 的(版本)?还是资源本身可能会影响施法过程中发生的事情?! TBH,如果它只是 PHP 那么你可能会很安全我会认为......现在!?如果你只是在一个唯一的 Id 之后,那么你可以只使用整个字符串,或者 hash 它可能是?

标签: php


【解决方案1】:

接缝简单

intval($resource)

【讨论】:

    【解决方案2】:

    Jakub,是的,PHP 将始终为您当前使用的每个资源提供一个唯一 ID。当资源未设置()或释放时,例如mysql_free_result。然后该 ID 再次可用,PHP 可以再次重用这些资源。

    如果您在会话中“缓存”或保留资源 ID 并重用它们,请小心,因为 PHP 可能会释放资源,然后使用该 ID 重新创建新资源,而您的旧资源 ID 可能指向新的东西。

    所以你有它,资源是独一无二的,但不是永远的!

    希望这有助于为您揭开 PHP 中资源类型的神秘面纱。

    【讨论】:

    • 在某些环境中,2 个不同的用户在连接到同一个(共享)资源时是否不可能获得 same 资源 ID?还是那不可能?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-09-23
    • 1970-01-01
    • 2018-09-13
    • 1970-01-01
    • 2019-07-01
    • 2011-10-31
    • 2017-01-15
    相关资源
    最近更新 更多