整合Hashids,用于生成类似YouTube的Id,防爬虫。Hashids是一个小型的开放源代码库,可以将数字生成很短的、唯一的、非顺序的字符ID。 例如可以数字347转换为 “yr8” 字符串,你还可以将字符串ID进行解码恢复成数字。

1、首先到Hashids官网下载PHP版本,开源地址:https://github.com/vinkla/hashids
2、在dayrui目录下新建目录ThirdParty
3、将下载好的Hashids上传至ThirdParty目录下
4、修改文件HashGenerator.php和Hashids.php
namespace Hashids; 修改为 namespace Phpcmf\ThirdParty\Hashids;
5、添加自定义函数。config/custom.php
function eos_hashids( $id = '' , $operation = 'DECODE' , $key = 'G2cOwnsHcjnJAayk' , $length = '16'){
$hashids = new \Phpcmf\ThirdParty\Hashids\Hashids($key, $length);
if( $operation == 'DECODE' ){
return intval($hashids->decode( $id )[0] ? $hashids->decode( $id )[0] : '0');
}else if( $operation == 'ENCODE' ){
return $hashids->encode($id);
}else{
return;
}
}具体配置请看官网,只需要知道operation和key和length,一个是密钥,一个是加密长度,DECODE是解密,ENCODE是加密
这个时候可以进行测试了,在模板页面添加
{eos_hashids('100','ENCODE')}
<br>
{eos_hashids('bQ58jBGvwNEVWp63','DECODE')}不出意外就可以得到
bQ58jBGvwNEVWp63 100
6、添加加密url的函数,config/custom.php
// 详情ID
function eos_hashids_id($data){
return eos_hashids($data['id'],'ENCODE');
}
// 栏目ID
function eos_hashids_catid($data){
return eos_hashids($data['id'],'ENCODE');
}7,修改URL规则

8、更新缓存,重新生成内容地址,这个时候就得到了带有加密地址的url了,这个时候访问url会出现404,因为还差最后一步解密

9、修改模块App / Article / Controllers / 目录下的 Category.php ,15行
(int)\Phpcmf\Service::L('Input')->get('id'),
修改为
(int)eos_hashids(\Phpcmf\Service::L('Input')->get('id'),'DECODE'),10、修改模块App / Article / Controllers / 目录下的 Show.php ,13行
(int)\Phpcmf\Service::L('Input')->get('id'),
修改为
(int)eos_hashids(\Phpcmf\Service::L('Input')->get('id'),'DECODE'),到此为止,ID加密就算是完成了,返回页面刷新试试。使用此函数可以进行很多加密,具体玩法可以自行研究。
感谢回帖!