联系官方销售客服
1835022288
028-61286886
整合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加密就算是完成了,返回页面刷新试试。使用此函数可以进行很多加密,具体玩法可以自行研究。
感谢回帖!