Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/240.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP如何制作类似Youtube的id';什么是URL?_Php_Hash_Youtube - Fatal编程技术网

PHP如何制作类似Youtube的id';什么是URL?

PHP如何制作类似Youtube的id';什么是URL?,php,hash,youtube,Php,Hash,Youtube,我正在制作一个人们可以发布帖子的网站。在我的数据库中,每篇文章都有一个ID,如1、2、3等,但我想更改它们,就像使用Youtube那样的散列一样 例如,而不是 他们会去 有没有像对数字进行散列并解码这样的方法?由于此散列不需要安全,您可以使用PHP内置的散列函数,md5()。我建议使用时间戳作为输入: $id=md5(time()) 只要把它剪短就行了。我建议您将原始主键保留为一个自动递增整数,并将此散列添加为一个新列。好吧,虽然您可以对其进行加密/解密,但这没有多大意义(您将使其变慢,而不会带

我正在制作一个人们可以发布帖子的网站。在我的数据库中,每篇文章都有一个ID,如1、2、3等,但我想更改它们,就像使用Youtube那样的散列一样

例如,而不是

他们会去


有没有像对数字进行散列并解码这样的方法?

由于此散列不需要安全,您可以使用PHP内置的散列函数,
md5()
。我建议使用时间戳作为输入:

$id=md5(time())


只要把它剪短就行了。我建议您将原始主键保留为一个自动递增整数,并将此散列添加为一个新列。

好吧,虽然您可以对其进行加密/解密,但这没有多大意义(您将使其变慢,而不会带来任何实际好处)。 您可以做的是将DB中的主键设置为字符串,并为id生成一个哈希,或者添加一个具有唯一索引的新列,将哈希保存在那里,然后按哈希列搜索帖子(并且可能保留id用于内部目的)。您可以使用复杂的算法,也可以只使用md5(uniqid()),因为这不是为了安全,所以我不会太担心。确保在创建新帖子时,不会违反唯一性。现在,插入失败还有另一个原因(散列不是唯一的),所以请做好准备

检查:
序列
hu9NA827z
是BASE64。解码它,你会得到一个6字节的二进制序列

例如:

base64_encode('123456') // = 'MTIzNDU2'
base64_decode('MTIzNDU2') // = '123456'
然而,在YouTube上,BASE64并不是用来保护信息的,它的目的只是将其序列化为人类可读的ASCII格式。它背后的真正信息是一个48位二进制序列

这个二进制序列可能是数据库中视频ID的加密版本,但它真正是什么,只有YouTube开发人员知道,他们当然希望它保持这种状态


在您的情况下,您可以简单地使用PHP中提供的许多双向加密方法中的一种实现类似的系统,这种方法支持您选择的许多加密算法,包括非常安全的AES。

有很多这样的算法。您需要/希望URL具有哪些特定属性?短?很难猜到?很容易大声说出来?简短,简单,只是不是ID。我想能够加密和解密它。哈哈“htpp”你确定你知道你在做什么吗?谢谢你的回复,但是md5太长了,我想要一些短一些的,比如Imgur,Youtube和bit.ly use。@Neme有一个好处,这也是Youtube使用它的原因。由于生成ID的算法未知,因此机器人/爬虫无法按顺序从其网站获取或发布所有视频的评论。如果视频按
/v/1
/v/2
/v/3
等顺序排列,这将是世界上最容易抓取YouTube的事情。根据您所说的,如果我对ID进行编码和解码,速度会变慢,我会在数据库中使用另一列,并使用substr(str_shuffle())生成随机哈希,需要时,我会在内部使用ID。@user3769279是一个相对术语。每一行新代码都会使它变慢。显然,计算
1+2+3
要比
1+5
慢,因为还有一个额外的操作,但是即使你努力,你也不会注意到差异。在一个脚本上计算一个哈希值,而这个脚本需要花费大量的时间,比如从数据库中获取数据,这并不是一个瓶颈。