Вступление
Некоторые камеры категорически отказываются задавать имена файлам на основе timestamp, используя обычный счетчик. В обиходе эта мелочь действительно кажется мелочью, но в интернете вырастает в проблему, позволяющую особо любопытным шерстить сайт в поисках фотографий P1100812.jpg и P1100813.jpg после просмотра P1100811.jpg.
Варианты решения:
добавить статичный префикс- добавить динамичный префикс
Теперь надо определиться как добавить префикс, сделать ли это через самописный скрипт до загрузки фоток, переименовав все локальные фотографии (сила науки, о нет!) или в момент загрузки на сервер. Не глядя, без вздрогнутых мышц лица, был выбрал вариант «на сервер!».
Техническая реализация:
- она есть! = пишем ручками
- её нет! = готовый плагин для wordpress
К счастью или к сожалению, поиск плагинов выдал список outdated на старые версии wordpress. Поэтому вооружившись гуглом и затем np++ было найдено, что:
- обработка аплоада файлов на плечах
/wp-includes/functions.php
- имя файла *генерируется в функции
wp_unique_filename
*генерируется — это я немного загнул, просто проверяется на уникальность/корректность и изменяется в случае, но это, судя по коду, конечная инстанция.
И так, открываем файл functions.php
, находим в нем тело функции wp_unique_filename
, там строку $filename = sanitize_file_name($filename);
и радостно правим её!
Как её править?
Например как (один из вариантов):
$filename = crc32(md5(microtime()).sanitize_file_name($filename))."_".sanitize_file_name($filename);
$filename = md5(microtime().sanitize_file_name($filename))."_".sanitize_file_name($filename);
$filename = crc32("blablabla".microtime().sanitize_file_name($filename))."_".sanitize_file_name($filename);
$filename =
любые душе угодные хеши php и что-нибудь рандомное.sanitize_file_name($filename);
microtime()
— выполняет роль ГПСЧ, выдавая текущее серверное время.
Мы оставляет текущий алгоритм работы wp_unique_filename
, лишь добавляя к началу файла наш мусор.
Я для себя выбрал вариант CRC32(
магия эльфов)."_".sanitize_file_name($filename);
, так как CRC32
не уродует внешне файл (имя), добавляя немножко цыферек/буковок, превращая "random_file_names.png
" в удобоваримый "255298064_random_file_names.png
", что всяко приятнее глазу чем "ae812e87bbbf3a068807fe763721c38a_random_file_names.png
".
Итог:
- простое решение в одну строку
- приватные файлы чуть приватнее (хоть и в паблик системе)
Бонус:
3894406080_P1100810.jpg и 3765414138_P1100811.jpg
В той же папке есть P1100827.jpg…
ссылка на оригинал статьи http://habrahabr.ru/post/257239/
Добавить комментарий