Проверьте, существует ли файл, используя размер файла php

У меня есть сайт, на котором пользователи загружают фотографии, но важно, чтобы они не загружали одну и ту же фотографию дважды. Мне нужно сравнить каждый загруженный файл со всеми фотографиями в каталоге, чтобы увидеть, существует ли уже изображение. Единственная загвоздка - я не могу использовать имя файла. Есть ли способ сравнить размеры всех фотографий сразу, чтобы увидеть, есть ли совпадения?

Я еще не пробовал код, потому что понятия не имею, возможно ли это.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
2
0
334
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

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

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

Спасибо, я считаю, что это то, что я ищу. Нужно ли мне создавать полностью отдельную базу данных для хранения хеш-файлов, или я могу изменить имя файла на хеш-значение во время начальной загрузки? Кроме того, есть ли гарантия, что каждый хэш-файл будет уникальным, если файл не идентичен? @ Дерек Браун

Mekade24 14.05.2018 20:01

@ Mekade24, вы можете полностью изменить имена файлов на хеш-имя - это было бы очень простым решением.

Derek Brown 14.05.2018 20:06

@ Mekade24 два файла имеют уникальные хэш-значения с очень очень высокой вероятностью (см. stackoverflow.com/questions/1867191/…).

Derek Brown 14.05.2018 20:09

Используйте следующее:-

<?php
$directoryName = 'imagesDir';
$fileToBeChecked = 'newlyUploadedImageFilePath';

function checkIfSameSizeFileExistsInDirectory($dir, $file){
    $entries = array_diff(scandir($dir), array('.', '..'));
    foreach ($entries as $entry){
        if (!is_dir($entry)){
            if (filesize($entry)==filesize($file)){
                return true;
            }
        }
    }
    return false;
}
?>

Тот факт, что два файла имеют одинаковый размер, не означает, что это один и тот же файл. Это не сработает.

Derek Brown 14.05.2018 20:06

Я могу это понять, однако пользователь попросил сравнить, существует ли файл того же размера.

nandal 14.05.2018 20:09

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

nandal 14.05.2018 20:10

Другие вопросы по теме