Случайные URL-адреса PHP (короткий URL)

После использования таких сайтов, как JSFiddle, я заметил, что они автоматически генерируют случайный и уникальный URL, состоящий из различных символов верхнего и нижнего регистра.

Мы могли бы воспользоваться этим для наших страниц бронирования. Как это делается?

Это не случайность, основанная на идентификаторе вашей записи в базе данных.

Как это работает:

в основном у вас есть строка, которая уникальна, но ее можно расшифровать для представления числа, вы должны посмотреть на нее как на короткое шифрование / дешифрование.

У вас есть функция, которая будет принимать уникальный идентификатор, а затем создает уникальную «короткую строку» из этого идентификатора, а затем вы можете отменить процесс, чтобы получить уникальный идентификатор из короткой строки.

Вот отрезанный я нашел сайт:

function alphaID($in, $to_num = false, $pad_up = false, $passKey = null) { $index = "abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; if ($passKey !== null) { /* Although this function's purpose is to just make the * ID short - and not so much secure, * with this patch by Simon Franz (http://blog.snaky.org/) * you can optionally supply a password to make it harder * to calculate the corresponding numeric ID */ for ($n = 0; $n<strlen($index); $n++) { $i[] = substr( $index,$n ,1); } $passhash = hash('sha256',$passKey); $passhash = (strlen($passhash) < strlen($index)) ? hash('sha512',$passKey) : $passhash; for ($n=0; $n < strlen($index); $n++) { $p[] = substr($passhash, $n ,1); } array_multisort($p, SORT_DESC, $i); $index = implode($i); } $base = strlen($index); if ($to_num) { // Digital number <<-- alphabet letter code $in = strrev($in); $out = 0; $len = strlen($in) - 1; for ($t = 0; $t <= $len; $t++) { $bcpow = bcpow($base, $len - $t); $out = $out + strpos($index, substr($in, $t, 1)) * $bcpow; } if (is_numeric($pad_up)) { $pad_up--; if ($pad_up > 0) { $out -= pow($base, $pad_up); } } $out = sprintf('%F', $out); $out = substr($out, 0, strpos($out, '.')); } else { // Digital number -->> alphabet letter code if (is_numeric($pad_up)) { $pad_up--; if ($pad_up > 0) { $in += pow($base, $pad_up); } } $out = ""; for ($t = floor(log($in, $base)); $t >= 0; $t--) { $bcp = bcpow($base, $t); $a = floor($in / $bcp) % $base; $out = $out . substr($index, $a, 1); $in = $in - ($a * $bcp); } $out = strrev($out); // reverse } return $out; } 

пример

 alphaID(9007199254740989); //-> PpQXn7COf alphaID('PpQXn7COf', true); //-> 9007199254740989 

здесь есть ссылка на скрипт: https://github.com/kvz/deprecated/blob/kvzlib/php/functions/alphaID.inc.php

Используйте функцию uniqid (), если вам нужен только случайный идентификатор определенной длины или используйте хеш md5 () вашего длинного URL-адреса, если вам нужно что-то повторяемое. (вывод всегда одинаковый для данного входа). Создание короткой службы URL с использованием PHP и MySQL дает хорошее изложение того, как собрать все это вместе.

Это очень просто.

ваш URL-адрес похож на http://www.domain.com/in/here/RANDOMPART

вы переписываете http://www.domain.com/in/here/* сценарий по вашему выбору. В этом скрипте вы можете получить запрошенный uri с глобалями, и вы можете разбить его и использовать часть после последнего «/». Это ваш RANDOMPART. yust проверите его против вашего db или что-то еще.

Чтобы создать такой URL-адрес, вам просто нужно добавить что-то позади «www.domain.com/in/here/». Вы могли бы генерировать красивую, надеюсь, уникальную строку с md5(uniqid(rand(), true)) .

Не забудьте сохранить эту строку в db или что-то еще.

Надеюсь, это поможет.

Что-то в этом роде:

 <?php $url_length = rand(10,20); //generate a random number between 10 and 20 for the length of the URL $url = array($url_length); for($i=0; $i < $url_length; $i++) { $char = 0; while($char < 65 OR $char > 122 OR ($char > 91 AND $char < 97)) { $char = rand(65,122); } $url[] = chr($char); } print_r($url); ?> 

Обратите внимание, что это частично код psuedo. Это создает URL-адрес со случайной длиной (где-то между 10 и 20) и заполняет каждый символ случайным кодом ASCII, который связывает букву с алфавитом. В таблице ASCII есть несколько «мусорных» символов между буквами верхнего и нижнего регистра, поэтому это приведет к перезапуску случайного числа, пока не будет создан действительный номер ASCII.

Предполагается, что вы храните этот URL-адрес в базе данных. Чтобы убедиться, что эта строка уникальна, вам нужно проверить, существует ли она в базе данных. Если нет, добавьте его, и все в порядке. Если он существует, повторите процесс еще раз, пока не получите уникальную строку.

Вы могли бы просто создать массив из всех потенциальных символов, а затем случайным образом выбрать все, что хотите, и вернуть их как URL-адрес «кода»?

 $ arr = array ('a', 'b', 'c', 'd');
 $ count = count ($ arr) - 1;
 $ str = $ arr [rand (0, $ country)]. $ arr [rand (0, $ country)];