Php случайная строка файла

Генерация случайной строки в PHP

В этой статье показано, как сгенерировать случайную строку в PHP.

1. Использование random_bytes() функция

В PHP 7 вы можете использовать random_bytes() функция для генерации криптографически безопасных случайных байтов указанной длины. Возвращенные байты могут быть преобразованы в строку, содержащую шестнадцатеричное представление.

Функции CSPRNG random_bytes() а также random_int() были добавлены в PHP в версии 7.0. Эти функции можно использовать в криптографических целях, например для генерации случайных векторов инициализации и солт-значений. Если вы все еще используете PHP 5.x, вот PHP 5 polyfill для этих функций.

2. Использование openssl_random_pseudo_bytes() функция

До PHP 7.0 вы также можете использовать openssl_random_pseudo_bytes() функция для генерации псевдослучайной строки байтов указанной длины. Он использует криптографически стойкий алгоритм для создания псевдослучайных байтов. Начиная с PHP 7.4.0, эта функция выдает исключение в случае сбоя.

3. Использование random_int() функция

Если вы хотите ограничить допустимые символы в случайной строке, вы можете написать собственную процедуру для генерации случайных строк. Наиболее распространенный и эффективный подход — случайный выбор символов из нужного диапазона с помощью random_int() и добавляйте этот символ в строку, пока не будет достигнута нужная длина.

Вот пример того, как вы можете этого добиться. Он генерирует случайную буквенно-цифровую строку ASCII, используя диапазон, состоящий из прописных и строчных букв и цифр. Как уже упоминалось ранее, random_int() Функция была представлена в PHP 7 и использует криптографически безопасный генератор псевдослучайных чисел (CSPRNG).

Читайте также:  METANIT.COM

Источник

Выводим случайную строку из файла

Wordpress
Давненько я не писал посты для категории «WordPress», но сегодня я решил восполнить этот пробел. Я расскажу как сделать вывод случайной записи из файла в любое место шаблона на WordPress. Думаю многим пригодится, ведь выводить можно все что угодно: от простых шуток и анекдотов до случайных рецептов, например, для кулинарного сайта. Читаем дальше.

Для начала, если кто не понял о чем пойдет речь, то посмотрите наверх. Видите там оранжевую строчку? Она выводится автоматически из специального файла. Можно, конечно, для этого использовать БД. Просто создать там новую таблицу, но я решил пойти по пути наименьшего сопротивления и использовать обычный txt файл. Вот как это выглядит у меня:
случайная строка из файла
Теперь что нам понадобится:
Обычный текстовый файл (я сразу все кодирую в UTF-8 без BOM, чтобы не было лишних проблем с кодировкой). Он будет содержать нужные нам строки, которые мы хотим выводить в случайном порядке.
Для непосредственно вывода я использовал простой код:

Вставил его в файл header.php своей темы. Все, этого достаточно!

Если подумать где применить такую возможность, то я могу придумать примерно следующее:

  • случайные шутки и анекдоты;
  • случайные цитаты умных людей;
  • случайные строки из песен для сайтах с текстами;
  • рецепты для сайтов с рецептами;
  • рандомные программы для варезников.

Вообще, можно выводить все что угодно, а если в файле со строками использовать ссылки, то будет дополнительная перелинковка, как в случае с хлебными крошками. Я не стал оформлять все это в виде плагина, так как не очень их люблю и предпочитаю обходиться простым кодом где это возможно.

Вот вроде бы и все, только статья получилась маловата.
О, сегодня дочитал книгу «Голодные игры». За всю свою жизнь я прочитал, наверное, книг 5 😀 Я имею ввиду художественную литературу, а вот технической за годы учебы в университете было проработано достаточное количество. Сестра у меня читать любит, поэтому в комнате всегда много книг лежит. Вот мне как-то раз скучно стало, а под руку подвернулись голодные игры. Вспомнив каким полнейшим УГ оказался фильм я было хотел книгу отложить, но прочитав буквально пару страниц оторваться уже не смог 😉 Это не постовой и не реклама, никаких ссылок нет, я просто делюсь с вами своими наблюдениями и мыслями, как и положено делать на болге.

Вот теперь точно все. Подписывайтесь, комментируйте. И пусть удача всегда будет на вашей стороне 😀

Комментарии:

  1. Алексей — 01.07.2012 16:42 Сергей, отличный материал! Давно задумывался на одном из своих сайтов выводить случайную цитату. Обязательно сделаю как вы написали! Спасибо за статейку! 😉
  2. myblaze — 01.07.2012 16:58 Не за что! Все пишут что они рады когда их записи комментируют и хоть это звучит уже как-то заезженно, но я вот реально доволен, когда вижу положительные отзывы 😉
  3. Алексей — 01.07.2012 17:13 Но вот скажи, Сергей, куда мне еще выразить свое положительное отношение к материалу, как не в комментариях? Прочитать и закрыть страницу — это как-то не интересно. 😉
  4. ExFedot — 01.07.2012 18:10 Пригодится, нормально! Книгу не читал, но теперь может прочитаю)))
  5. Лысенко Евгений — 01.07.2012 21:40 То что нужно 😉 Записал это мероприятие в план действий по улучшению блога.
  6. нерадивый бухгалтер — 01.07.2012 23:19 Возьму на заметку, надо только подумать как это лучше реализовать)
  7. myblaze — 02.07.2012 08:27 Почитай, мне понравилось.
  8. myblaze — 02.07.2012 08:27 Отлично 🙂
  9. myblaze — 02.07.2012 08:28 Если что-то не получится — пишите, помогу чем смогу 😉
  10. нерадивый бухгалтер — 04.07.2012 23:12 Ой спасибо, я ведь полный кипятильник в этом деле)
  11. Евгений Комиссаров — 07.07.2012 13:23 да для перелинковки то что нужно:) А можно как то сделать что бы еще и миниатюры возле текста выводились ?
  12. Евгений Комиссаров — 07.07.2012 17:25 Разобрался.. просто ввожу в одну строку все что мне нужно и оно работает 🙂
  13. myblaze — 07.07.2012 20:19 Да, там можно все что угодно писать 🙂 А то что сами разобрались тоже очень хорошо)
  14. Denis — 17.07.2012 19:09 А я вот например хочу вывести название записи. А для этого надо написать php-код в txt-файле , верно? Я пишу, но на странице так код и выводится «». Не знаете, как решить эту проблему?
  15. myblaze — 17.07.2012 19:27 Если я правильно понял суть проблемы, то не забудьте расширением у файла с php кодом изменить с .txt на .php.
  16. Denis — 17.07.2012 19:32 Уже пробовал, не помогло.
  17. myblaze — 17.07.2012 20:21 Я суть вопроса не понял если честно. Вы сделали все по инструкции?
  18. Denis — 17.07.2012 20:24 Да, один в один.
  19. myblaze — 17.07.2012 21:56 Блин чет я туплю. В общем так. Файл с фразами, которые будем выводить — расширение txt. Все, больше файлов не нужно. Теперь код, который эти фразы выводит — приведен в статье. Его вставляем, например в файл sidebar.php, если у вас вордпресс. Если у вас не wordpress, а какая-то другая CMS — все равно должно работать. Если у вас просто выводится текстом код, как пишете, то проверьте, у вас хостинг поддерживает php?
  20. Denis — 17.07.2012 21:59 У меня просто выводится текстом код. CMS WordPress. PHP поддерживается.
  21. myblaze — 17.07.2012 22:29 Ок, куда вставляете код? В общем пишите на мыло — так проще будет =) Мыло на странице «Пишите мне».
  22. Denis — 17.07.2012 22:33 В файл single.php
  23. vvnis — 18.07.2012 09:06 можно лайки ставить! нужны лайки!
  24. Андрей — 16.10.2014 15:24 А вы можете сделать такой скрипт, для хостингов без поддержки php как например ucoz?
  25. Дмитрий — 24.04.2015 14:49 лайк
  26. Akira Tsukizawa — 24.05.2015 20:04 Полезная штука. Спасибо!
  27. сергей — 04.06.2018 14:53 привет! а как это сделать по клику? чтоб на кнопу нажал и новая строка но без перезагрузки страницы?

Источник

random_bytes

Создаёт строку, содержащую равномерно выбранные случайные байты с запрошенной длиной.

Поскольку возвращаемые байты выбираются совершенно случайно, полученная строка может содержать непечатаемые символы или недопустимые последовательности UTF-8. Может потребоваться её кодирование перед передачей или отображением.

Случайная последовательность, создаваемая функцией, подходит для всех приложений, включая генерацию долгосрочных секретов, таких как ключи шифрования.

Источники случайных величин в порядке приоритета:

  • Linux: » getrandom(), /dev/urandom
  • FreeBSD >= 12 (PHP >= 7.3): » getrandom(), /dev/urandom
  • Windows (PHP >= 7.2): » CNG-API Windows: » CryptGenRandom
  • macOS (PHP >= 8.2; >= 8.1.9; >= 8.0.22, если CCRandomGenerateBytes доступен во время компиляции): CCRandomGenerateBytes() macOS (PHP >= 8.1; >= 8.0.2): arc4random_buf(), /dev/urandom
  • NetBSD >= 7 (PHP >= 7.1; >= 7.0.1): arc4random_buf(), /dev/urandom
  • OpenBSD >= 5.5 (PHP >= 7.1; >= 7.0.1): arc4random_buf(), /dev/urandom
  • DragonflyBSD (PHP >= 8.1): » getrandom(), /dev/urandom
  • Solaris (PHP >= 8.1): » getrandom(), /dev/urandom
  • Любая комбинация операционной системы и версии PHP, не указанная ранее: /dev/urandom
  • Если ни один из источников не доступен или все они не генерируют случайную величину, то будет выброшено исключение Random\RandomException .

Замечание: Эта функция была добавлена в PHP 7.0, а для версий с 5.2 по 5.6 включительно доступна » пользовательская реализация.

Список параметров

Длина генерируемой строки в байтах; должно быть 1 или больше.

Возвращаемые значения

Возвращает строку, состоящую из заданного количества криптографически безопасных байт.

Ошибки

  • Если подходящие источники случайных величин отсутствуют, то выбрасывается исключение Random\RandomException .
  • Если значение параметра length меньше 1 , будет выброшена ошибка ValueError .

Список изменений

Версия Описание
8.2.0 В случае возникновения ошибки CSPRNG , функция теперь будет выбрасывать исключение Random\RandomException . Ранее выбрасывалось исключение Exception .

Примеры

Пример #1 Пример использования random_bytes()

Результатом выполнения данного примера будет что-то подобное:

Смотрите также

  • Random\Randomizer::getBytes() — Получает случайные байты
  • random_int() — Получает криптографически безопасное, равномерно выбранное целое число
  • bin2hex() — Преобразует бинарные данные в шестнадцатеричное представление
  • base64_encode() — Кодирует данные в формат MIME base64

Источник

Как в PHP выдернуть рандомно уникальные строки из текстового файла?

Имеем текстовой фал с N-м количеством строк текста (строки необязательно должны быть предложениями, и необязательно со знаками препинания).
Допустим нужно выдернуть из этого файла 150 случайных строк и вывести их.

На одном из форумов увидел вот такой код (который вроде как должен как раз реализовать такую идею, однако, я попробовал — и каждый раз скрипт выводит одну-две строки текста (номер строки : текст), а остальные строки только номера строк без текста. ). Помогите найти ошибку. Заранее спасибо.

——-
КОД:
# Подсчитываем кол-во строк в файле.
$f = fopen(‘semantic.txt’, «r»);
# Подсчитываем кол-во строк в файле.

function FileGetCount( $path ) if ( $f = fopen( $path , «r» ) ) $counter = 0;
while (fgets($f)) < $counter++; >
fclose($f);
return $counter;
>
return false;
>
function GetRandomArray( $num , $lineCount ) if ( $num > $lineCount ) $num = $lineCount;
>

$subFunction = function( &$result , &$num , $min , $max ) use(&$subFunction) if ( ( $num $max ) ) return [];
>
$key = mt_rand( $min , $max );
$result[] = $key;
$num—;
if ( mt_rand(0,1) ) $subFunction( $result , $num , $min , $key-1 );
$subFunction( $result , $num , $key+1 , $max );
> else $subFunction( $result , $num , $key+1 , $max );
$subFunction( $result , $num , $min , $key-1 );
>
>;
$result = [];
$subFunction( $result , $num , 0 , $lineCount — 1 );
return $result;
>
function EchoRandomLine( $path , $randomMap ) if ( $f = fopen( $path , «r» ) ) $last = 0;
foreach($randomMap as $line) rewind($f);
$newLine = $line = $line+1;
while($newLine—) $buffer = fgets($f);
>
echo «$line : $buffer
«; # номер_строки : сама_строка
>
fclose($f);
return true;
>
return false;
>

$path = «semantic.txt»;
$countRandomLine = 150;

$countLine = FileGetCount( $path );
$randomMap = GetRandomArray( $countRandomLine , $countLine );
EchoRandomLine( $path , $randomMap );
?>

Простой 1 комментарий

Источник

Оцените статью