как сделать, чтобы Post id выводился не test.ru/city/28 , хотелось бы test.ru/city/cgthjkgf-28 , как перед id сгенерировать случайно буквы и цифры?
class Secury
{
/**
* Возвращает случайный набор байтов заданной длины
*
* @param int $len
*
* @throws \RuntimeException
*
* @return string
*/
public function randomKey($len)
{
$key = '';
if (function_exists('random_bytes')) {
$key .= (string) random_bytes($len);
}
if (strlen($key) < $len && function_exists('mcrypt_create_iv')) {
$key .= (string) mcrypt_create_iv($len, MCRYPT_DEV_URANDOM);
}
if (strlen($key) < $len && function_exists('openssl_random_pseudo_bytes')) {
$tmp = (string) openssl_random_pseudo_bytes($len, $strong);
if ($strong) {
$key .= $tmp;
}
}
if (strlen($key) < $len) {
throw new \RuntimeException('Could not gather sufficient random data');
}
return $key;
}
/**
* Возвращает случайную строку заданной длины состоящую из цифр, латиницы,
* знака минус и символа подчеркивания
*
* @param int $len
*
* @return string
*/
public function randomStr($len)
{
$key = $this->randomKey($len);
$chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_';
$result = '';
for ($i = 0; $i < $len; ++$i) {
$result .= substr($chars, (ord($key[$i]) % strlen($chars)), 1);
}
return $result;
}
}
$s = new Secury;
$randomString = $s->randomStr(10);
var_dump($randomString);
Результат записываете вместе с id в базу. Если id числовое поле в бд, то заводите отдельное поле для случайно строки.
Код работает на php 5.6+.
Тест http://sandbox.onlinephpfunctions.com/code/b02f85276148967e778f20ecf1a5dd9d70fe1b2c
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости