Как сделать, чтобы Post id выводился не test.ru/city/28…?

159
28 октября 2017, 17:46

как сделать, чтобы Post id выводился не test.ru/city/28 , хотелось бы test.ru/city/cgthjkgf-28 , как перед id сгенерировать случайно буквы и цифры?

Answer 1
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

READ ALSO
MySQL: Too many connections

MySQL: Too many connections

Здравствуйте

194
При переходе на другой url не сохраняется $_SERVER[&#39;PHP_AUTH_USER&#39;] и $_SERVER[&#39;PATH_AUTH_PW&#39;]

При переходе на другой url не сохраняется $_SERVER['PHP_AUTH_USER'] и $_SERVER['PATH_AUTH_PW']

ЗдравствуйтеСделала http аутентификациюю Она работает, но почему-то при переходе на url другого вида выбивается ошибка о том, что $_SERVER['PHP_AUTH_USER']...

178
Как реализовать переподключение к БД в ооп-стиле php?

Как реализовать переподключение к БД в ооп-стиле php?

Доброго времени сутокПишу свой класс, наследуюсь от класса mysqli с целью прикрутить метод query() с автоматическим переподключением к базе, если...

156