Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Уникальность имени файла.

Сообщения:  [1-10]    [11-20]  [21-29] 

 
 автор: cheops   (20.09.2005 в 12:09)   письмо автору
 
   для: tim   (20.09.2005 в 11:26)
 

Под новые вопросы лучше заводить новые темы. Продолжение в теме по ссылке.

http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=7623

   
 
 автор: tim   (20.09.2005 в 11:26)   письмо автору
 
   для: JC_Piligrim   (29.07.2005 в 22:29)
 

Всем привет, помогите начинающему. Искал везде так и не нашёл поэто вот решил спросить.
У меня директория /text/ там все текстовые файлы со статьями. имена файлов a1.txt, a2.txt, a3txt..... при добавлении текстового файла в директорию скрипт считывает документы выстраивает их по дате создания и выводит заголовок и часть текста, заголовок формирую в ссылку для открытия документа полностью в соседней части страницы.
Вопрос: как сделать так, чтобы при добавлении через форму текста в новый документ, документу присваивалось имя +1, т.е. а9.txt, a10txt.... ?

   
 
 автор: DJ Paltus   (30.07.2005 в 15:08)   письмо автору
 
   для: JC_Piligrim   (29.07.2005 в 22:04)
 

Вы не обратили внимания, я же иду дальше. Я уже мечу не в то, чтобы сравнивать имя файла, проблема детская и успешно с помощью участников форума решена. Я же теперь исследую возможность найти уникальные признаки графического файла, чтобы проверять при загрузке наличие в деректории не картинки с таким же имененм, а картинки с таким же содержанием. Создана новая тема http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=5857&page=1, в которой я как раз и пытаюсь поставить вопрос о вытягивании из файла максимума значений параметров.

   
 
 автор: JC_Piligrim   (29.07.2005 в 22:29)   письмо автору
 
   для: DJ Paltus   (29.07.2005 в 16:51)
 

Зачем массив $HTTP_POST_FILES?


Вот:


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

- $MyFile — имя временного файла на машине сервера, который содержит
данные, переданные пользователем. С этим файлом теперь можно вытво-
рять все что угодно: удалять, копировать, переименовывать, снова удалять...
- $MyFiie_name — исходное имя файла, которое он имел до своей отправки
на сервер.
- $MyFiie_size — размер закачанного файла в байтах.
- $MyFiie_type — тип загруженного файла, если браузер смог его опреде-
лить. К примеру, image/gif, text/html И Т. Д.

Как видим, префикс у всех созданных переменных один и тот же -
MyFiie_. Этот префикс состоит из имени элемента закачки в форме, к кото-
рому присоединен знак _.
(с) Дмитрий Котеров "Самоучитель PHP4"

Единственная проблема - старые версии PHP неправильно обрабатывают файлы, имена переменных которых в html-форме представляли собой ключ ассоциативного массива. То есть, имя было, скажем "picture[photo]".

$HTTP_POST_FILES решает эту проблему, в случае, если режим track_vars в php.ini включен, а что касается формата представленных в нем данных, лучший способ выяснить это - print_r()'нуть содержимое массива после отправки файлов. У себя я сделать этого, к сожалению, сейчас не могу, так как данный режим на моей машине отказывается в силу неизвестных мне причин включаться, несмотря на все поправки в php.ini. =(

   
 
 автор: JC_Piligrim   (29.07.2005 в 22:04)   письмо автору
 
   для: DJ Paltus   (29.07.2005 в 19:55)
 

Товарищи, ну зачем же изобретать велосипед?! =)))

Если еще раз внимательно просмотреть тему, можно увидеть, что я упомянул функцию microtime(). Эта функция возвращает текущее значение времени, в формате:

секунды.микросекунды date_UNIX_timestamp, то есть примерно следующее:

0.73088000 1122657140

где первое число - микросекунды таймера, а второе - количество секунд, прошедшее с 1980 года, так называемый формат UNIX timestamp. Вероятность того, что эти параметры когда-нибудь совпадут ПРАКТИЧЕСКИ равна нулю!!!. (Ну разве что, таймер на сервере умрет вместе с мамкой и процом, но тогда все эти проблемы с уникальными именами файлов станут не актуальными. ;)

Зачем тогда "лохматить бабушку", как говорил Задорнов? =)

Обрабатываем эту строку (которая при каждом обращении к скрипту, хоть 10 раз в секунду будет разная) md5(), и получаем уникальный хеш-код на ближайшие тысячилетия непрерывной работы.

То есть, код будет таким:


<?php

$имя_файла 
md5(microtime());

?>



ВСЁ!!!!

Ну, если очень хочется грязных извращений, то можно поступить следующим образом:


<?

$имя_файла 
md5($размер_файла_в_байтах $размер_файла_в_координатах $mime_тип_файла . $100-200_байт_из_середины_файла.$IP_адрес_пользователя $координаты_нажатия_кнопки_отправки_формы_если_кнопка_графическая $содержимое_html_файла_с_сайта_какой-нибудь_фондовой _биржи_так_как_котировки_акций_меняются_каждую_секунду $текущая_позиция_магнитных_головок_жесткого_диска_ на_сервере_хостинга_полученное_запуском_CGI_приложения_на_хостинге $свежая_порция_анекдотов_закодированных_base64 $несколько_байт_из_потока_интернет-радио $еще_парочка_извращений);

?>


Вот тогда можно быть точно уверенным, что такое совпадение, да еще и захешированное md5(), никогда не встретится!!! =))) Вот только кому это нужно? Зачем создавать себе проблемы?

microtime() выдает ТОЧНО ТАКОЙ ЖЕ УНИКАЛЬНЫЙ РЕЗУЛЬТАТ с минимальной нагрузкой на сервер!!! Собственно, можно даже md5() не применять, а использовать, после нескольких преобразований результат microtime() так, как есть (пробелы, точки подчистить)!!! Вот вам и уникальное имя файла!!!

P.S. "И не надо лохматить бабушку" (c) Михаил Задорнов.

   
 
 автор: DJ Paltus   (29.07.2005 в 19:55)   письмо автору
 
   для: Евгений Петров   (29.07.2005 в 18:07)
 

насчет нагрузки на сервер... я предполагаю нечто следующее:
берем картиночицу, из нее выдираем максимум данных, и пишем их в строку. допустим, у нас есть разрешение 800*600, размер файла 156392 байт, миме-тип pjpeg. Такое совпадение достаточно редко, но хотелось бы добавить еще, скажем, количество цветов и что там еще бывет в служебных тегах jpeg. Пишем это дело в строку "800х600-pjpeg-156392-9548", потом берем хэш, для красоты и равной длины, md5("800х600-pjpeg-156392-9548"), что и будет именем файла. И коль файл с таким именем уже существует, мы говорим, мол, товарищ! эта картинка у нас уже есть. Вот тебе ссылка!
Ну, а если по ссылке идет вдруг такое совпадение, другая пикча, то мы даем возможность юзеру сделать насильное размещение фотографии.

   
 
 автор: Евгений Петров   (29.07.2005 в 18:07)   письмо автору
 
   для: cheops   (29.07.2005 в 18:04)
 

То что времени много это ещё терпимо, а вот то, что нагрузка на сервер большая - это уже плохо.

   
 
 автор: cheops   (29.07.2005 в 18:04)   письмо автору
 
   для: Евгений Петров   (29.07.2005 в 18:01)
 

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

   
 
 автор: Евгений Петров   (29.07.2005 в 18:02)   письмо автору
 
   для: Евгений Петров   (29.07.2005 в 18:01)
 

Опередили!!! :)))

   
 
 автор: Евгений Петров   (29.07.2005 в 18:01)   письмо автору
 
   для: DJ Paltus   (29.07.2005 в 16:51)
 

А зачем сваливать, если можно просто md5_file("имя_файла") и все та же достоверная проверка на наличие ТАКОЙ ЖЕ ФОТОГРАФИИ.

   

Сообщения:  [1-10]    [11-20]  [21-29] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования