За последние 24 часа нас посетил 55451 программист и 1795 роботов. Сейчас ищут 794 программиста ...

Проверить файл на уникальность

Тема в разделе "PHP для новичков", создана пользователем viphost, 18 янв 2013.

  1. viphost

    viphost Активный пользователь

    С нами с:
    23 мар 2009
    Сообщения:
    307
    Симпатии:
    0
    Возможно ли реализовать задумку?
    Есть загрузчик, и есть база данных файлов, в которой хранится md5 файла
    Можно ли как то сделать так, что бы при выборе файла, сразу же шла проверка на наличие такого файла в базе данных?
    Т.е. к примеру делаю обзор файла, выбираю его, беру md5 файла, и прогоняю хешь по базе.
    А то сейчас стоит проверка и только после заполнения всех полей и нажатием кнопки загрузить скрипт убивает процесс если файл существуют, а так бы можно было сразу увидеть что файл есть и доп поля заполнять не нужно.
    Я как понимаю все аяксом делать надо, есть ли готовые решения или просто посмотреть примерную реализацию? И как можно принять md5 файла сразу после его выбора?
     
  2. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    ну на html5 можно попробовать реализовать с неизвестной вероятностью успеха и тормознутости...
     
  3. viphost

    viphost Активный пользователь

    С нами с:
    23 мар 2009
    Сообщения:
    307
    Симпатии:
    0
    печалька =(
    я как то выдел на некоторых сайтах есть аякс проверка на существование логина/мыла, думаю можно глянуть там реализацию, но вот как с md5, ведь если файл много весит, то его загрузка долгая и если даже сделать автоматическую подгрузку файла, то юзер за это время успеют подготовить и заполнить все поля =(
     
  4. r3l0c

    r3l0c Активный пользователь

    С нами с:
    10 янв 2013
    Сообщения:
    453
    Симпатии:
    4
    Это совсем разные вещи). Проверит можно по размеру файла(будут осечки на маленьких файлах и меньше осечек на больших), либо проверять только загрузив файл на сервер
     
  5. viphost

    viphost Активный пользователь

    С нами с:
    23 мар 2009
    Сообщения:
    307
    Симпатии:
    0
    не, по весу не вариант, нужно по md5 сверять
    я хотел аяксам посмотреть сам принцип работы, с ним у меня тогу совсем.
    А сделать хотел так, в такой последовательность, если уж сразу ни как не получить мд5 файла
    Выбрал файл, аяксом он подгружается и передает данные в файл, например check.php, файл в свою очередь создает мд5 с полученной картинки и делает поиск по базе данных, если найдено совпадение, то выводит сообщение об этом, если нет, то все в порядке. Или я фантаст еще тот? xD
     
  6. r3l0c

    r3l0c Активный пользователь

    С нами с:
    10 янв 2013
    Сообщения:
    453
    Симпатии:
    4
    Ну это не фанатизм, это лишняя работа). md5 либо crc32. Вообще с какой целью проверять на уникальность? Пускай грузят%), а там уже проверять будет php скрипт, добавленный в cron. Пускай проверяет, если нашел 2 файла ошинаковых---один удаялет и делает симлинк на со второго на место удаленного)
     
  7. Shumomer

    Shumomer Активный пользователь

    С нами с:
    12 мар 2011
    Сообщения:
    194
    Симпатии:
    1
    Адрес:
    из вашего вображения
    какие проблемы-то?

    проверяем доступно-ли fileapi (на большинстве современных браузеров - доступно),
    если да - считаем мд5 локально, на компе пользователя, без закачки на серв
    если нет - аяксом сливаем файл на сервак и там проверяем мд5
     
  8. viphost

    viphost Активный пользователь

    С нами с:
    23 мар 2009
    Сообщения:
    307
    Симпатии:
    0
    r3l0c, не так не пойдет, так как к файлу создается новая страница, и получится что дубль файла, а кроном если буду удалять, у юзеров вопросы будут, куда делся их контент присвоенный именно им по их айдишнику =)
    Shumomer, можно по подробнее об этом, очень заинтересовало
     
  9. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    можно проверять имя файла. врятли кто-то сильно много переименовывает файлы одинаковые
    смотря какой размер файла...
     
  10. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    Я не совсем все понял, что где проверять?)
    Хотите проверить выбранный файл со стороны пользователя?(
    Ничего не понял.
    Где выбираете файл и что хотите проверить?)
    Или вы вписываете в поле md5 хеш и проверяете по базе есть такой файл на сервере или нет?
     
  11. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    да
     
  12. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    В любом случае будет смотреться по названию и расширению...
    А так нужно после выбора файла отправить запрос на $.get() и на сервере проверить этот GET уже через md5, то что пришло от пользователя, после выбора файла, и если такой файл уже существует с таким названием, то как он загрузится?(
     
  13. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    на HTML5 можно получить доступ к содержимому и посчитать любые штуки. только блин не известно сколько это займёт.
     
  14. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    Да не, я про javascript.
    Когда жмешь выбрать файл и выбираешь, то у тебя в этот момент отправится $.get() с названием выбранного файла... А на сервере проверится.=)
    Если файл не существует, отправится $.post(), если уже существует, подсветит контейнер с выбором файла, красным цветом или скажет что уже файл есть где-то и исчезнет через 5 секунд если так захочется.=)
    И записать предварительно в js переменных, если тыкают один и тот же файл уже в выбранном и этот файл не существует, то не отсылать запрос, также и с выбранным, если уже такой существует и он выбран, чтобы опять не отсылать запрос, записать его как существует и выбран, чтобы не тыкали опять выбрать его же, выбрали другой и он уже не равен записанному, то отсылаем запрос и проверяем существует файл или нет.=)