Intereting Posts
«MD5 расшифровывает» php-функцию для хранимой функции MySQL Совместить весь текст между двумя тегами HTML, используя регулярное выражение в PHP Очень конкретный запрос MySQL, который я хочу улучшить Формат даты PHPExcel Сообщение о сообщении формы Выпадающий список HTML с полем ввода пользователя Сообщение об ошибке при входе в Кохану PHP, отображающий html-адрес электронной почты на странице html Неустранимая ошибка – класс «Монго» не найден Имитировать многомерный массив в MySQL Будет ли PDO laststatment-> fetchAll (PDO :: FETCH_COLUMN, столбец $) повторно запускать запрос на каждый вызов? PHP session_start сериализует и блокирует все остальные, использующие один и тот же сеанс Финал: AJAX / jQuery / PHP Форма представления и модальная коробка открываются с успехом mysql_fetch_assoc (): предоставленный аргумент не является допустимым ресурсом результата MySQL в php Почему MySQL не поддерживает миллисекундную / микросекундную точность?

Случайное имя php

ЗДРАВСТВУЙ

Каков наилучший способ создать случайное имя для папки?

Он будет использоваться для имени папки для хранения документов. Но будет создано множество папок, поэтому нужно, чтобы это было уникально каждый раз, когда это было возможно.

Длина должна составлять около 7 символов.

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

Вы также можете попробовать uniqid() PHP с параметром more_entropy установленным в true.

Или просто sha1( microtime() )

Вот функция, которую я использую:

 function makeRandomString($max=6) { $i = 0; //Reset the counter. $possible_keys = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; $keys_length = strlen($possible_keys); $str = ""; //Let's declare the string, to add later. while($i<$max) { $rand = mt_rand(1,$keys_length-1); $str.= $possible_keys[$rand]; $i++; } return $str; } 

EDIT: Как сказал Билл Ящерица, вам лучше добавить какой-то счетчик. Хотя очень маловероятно, возможно, что одну и ту же строку можно создать дважды.

Является ли 7-символьное имя папки жестким и быстрым правилом (в чем причина ограничения)?

Я использую YYYYmmDDHHMMSS (и добавляю миллисекунду, если вы обнаружите, что получаете много столкновений).

где

  • YYYY = четырехзначная дата
  • мм = двухзначный месяц
  • DD = двухзначный день
  • HH = двухзначный (24 часа) час
  • MM = двухзначная минута
  • SS = вторая цифра секунды

Вы также можете попробовать проверить, был ли каталог уже создан, а затем засыпать за случайное число миллисекунд, прежде чем повторять попытку.

Код PHP:

 <?php $dirName = date( 'YmdHis', time() ); @mkdir( $dirName ) ?> 

Вам действительно нужно быть случайным?

Если вам нужно, чтобы он был уникальным, я бы предложил создать счетчик и преобразовать целочисленный номер в шестнадцатеричный или даже лучше базовый 36 (26 символов + 10 цифр). После создания папки увеличьте счетчик, и вы хорошо пойдете.

php имеет стандартную функцию tmpnam, которая делает именно это; он создает уникальное имя файла (фактически создает файл, но может удалять и использовать в качестве папки позже 🙂

с требованием, чтобы он был уникальным и 7 символов, я бы, вероятно, использовал число, закодированное на основе 36 (0-9 и az), таким образом вы можете просто увидеть, что такое последняя папка, и увеличить ее, чтобы создать новую.

«rh». mt_rand (10000,99999)

Затем проверьте, уникален ли он и регенерируется, если это не так. В некотором роде это лучше, чем сохранение состояния, как счетчик, потому что меньше может пойти не так.

 do { $f = "rh" . mt_rand(10000,99999); } while (file_exists($f)); 

Я думаю, что лучший подход к именованию – это использование функции uniqid ().

 $folder_name = uniqid();// eg: 4b3403665fea6 

или со статическим префиксом:

 $folder_name = uniqid('folder_'));// eg: folder_537834f6e981a 

или с сегодняшним (дат) префиксом:

 $folder_name = uniqid(date('hi-s')._); //eg: 04-23-59_537835dff2017