php文件生成唯一标识符,如何在Symfony 3中生成通用唯一标识符(UUID)

本文概述

到目前为止, 与Python或Java的标准版本不同, PHP并未提供一种简便的方法来本地生成通用唯一标识符。一些开发人员可以依靠uniqd生成的或包含的哈希算法的简单格式。在某些情况下, 你将只需要使用PHP生成这些标识符, 而无需依赖于额外的CLI工具, 对于你来说幸运的是, 有一个完全用PHP编写的有用的库可以帮助你。

我们正在谈论Ramsey编写的UUID库, 该库允许你生成和使用RFC 4122版本1、3、4和5通用唯一标识符(UUID)。你可以使用composer在Symfony 3项目上轻松使用此库, 我们将在本文中向你展示如何使用。

1.安装UUID软件包

第一步, 你需要使用composer安装该库, 因此打开命令行, 切换到项目目录并执行以下命令:

composer require ramsey/uuid

有关此库的更多信息, 请访问Github上的官方存储库。

2.使用库

基本上, 该库在Ramsey \ Uuid命名空间中公开Uuid类, 因此你只需要将其包含在控制器中即可。该类提供4种静态方法, 每种UUID类型都有一个相应的命名法, 例如uuid1, uuid3, uuid4和uuid5:

namespace AppBundle\Controller;

use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;

use Symfony\Component\HttpFoundation\Request;

use Symfony\Component\HttpFoundation\Response;

use Symfony\Component\HttpKernel\Exception\HttpException;

// Include Library Namespaces

use Ramsey\Uuid\Uuid;

use Ramsey\Uuid\Exception\UnsatisfiedDependencyException;

class DefaultController extends Controller

{

/**

* @Route("/", name="homepage")

*/

public function indexAction(Request $request)

{

try {

// Generate a version 1 (time-based) UUID object

$uuid1 = Uuid::uuid1();

// e.g ba51070a-d754-11e7-b225-4ccc6ab413a6

echo $uuid1->toString() . "
";

// Generate a version 3 (name-based and hashed with MD5) UUID object

$uuid3 = Uuid::uuid3(Uuid::NAMESPACE_DNS, 'php.net');

// e.g 11a38b9a-b3da-360f-9353-a5a725514269

echo $uuid3->toString() . "
";

// Generate a version 4 (random) UUID object

$uuid4 = Uuid::uuid4();

// e.g 0e9139c5-8e06-4a1a-bb5e-52a0abcd0072

echo $uuid4->toString() . "
";

// Generate a version 5 (name-based and hashed with SHA1) UUID object

$uuid5 = Uuid::uuid5(Uuid::NAMESPACE_DNS, 'php.net');

// e.g c4a760a8-dbcf-5254-a0d9-6a4474bd1b62

echo $uuid5->toString() . "
";

return new Response();

} catch (UnsatisfiedDependencyException $e) {

// Some dependency was not met. Either the method cannot be called on a

// 32-bit system, or it can, but it relies on Moontoast\Math to be present.

throw new HttpException(500, 'Caught exception: ' . $e->getMessage());

}

}

}

该库提到, 除非你对其进行了高级用法以生成与RFC 4122不同的标识符, 否则你可能不希望直接实例化UUID类, 而要使用静态方法。

已知异常

在安装和测试库时, 在我们之前的try-catch块中可能会遇到一些异常(未满足的依赖项):

在32位系统上调用Ramsey \ Uuid \ Converter \ Time \ DegradedTimeCnverter :: calculateTime时, 必须存在Moontoast \ Math \ BigNumber。

此错误是由于可以在基于32位的系统中实现的数学功能引起的。发生这种情况是因为UUID是一个无符号的128位整数, 而版本1 UUID的时间部分是一个无符号的64位数字。 32位系统上的PHP仅支持最大2147483647的带符号整数。你可以使用composer轻松解决它为PHP安装BigNumber软件包的问题:

composer require moontoast/math

该库对于处理大于(或可能通过数学计算变得大于)给定系统的PHP的最大整数值的整数很有用。在64位系统上, 该数字为9223372036854754775807。在32位系统上, 该数字为2147483647。当溢出此边界时, PHP会将数字转换为浮点数, 从而降低了精度(请参阅PHP手册中的Integers)。有关此软件包的更多信息, 请访问Github上的官方存储库。安装此软件包后, 你应该能够正常生成UUID。如果你知道该库可能遇到的另一个例外, 请在注释框中与社区共享。

编码愉快!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值