pixelfed/app/Services/HashidService.php
Strubbl 8aa97dec0c
Update HashidService.php
fix php 7.4 requirement, which causes the error `ERROR: Array and string offset access syntax with curly braces is deprecated {"userId":1,"exception":"[object] (ErrorException(code: 0): Array and string offset access syntax with curly braces is deprecated at /var/www/ap
p/Services/HashidService.php:24)`
2020-07-20 23:22:16 +02:00

50 lines
995 B
PHP

<?php
namespace App\Services;
use Cache;
class HashidService {
public const MIN_LIMIT = 15;
public const CMAP = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_';
public static function encode($id)
{
if(!is_numeric($id) || $id > PHP_INT_MAX || strlen($id) < self::MIN_LIMIT) {
return null;
}
$key = "hashids:{$id}";
return Cache::remember($key, now()->hours(48), function() use($id) {
$cmap = self::CMAP;
$base = strlen($cmap);
$shortcode = '';
while($id) {
$id = ($id - ($r = $id % $base)) / $base;
$shortcode = $cmap[$r] . $shortcode;
};
return $shortcode;
});
}
public static function decode($short)
{
$len = strlen($short);
if($len < 3 || $len > 11) {
return null;
}
$id = 0;
foreach(str_split($short) as $needle) {
$pos = strpos(self::CMAP, $needle);
// if(!$pos) {
// return null;
// }
$id = ($id*64) + $pos;
}
if(strlen($id) < self::MIN_LIMIT) {
return null;
}
return $id;
}
}