PDA

توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : شناسایی فایل های تکراری با هش فایل



omid1991
July 12th, 2022, 20:33
درود و عرض ادب خدمت بازدیدکنندگان گرامی

تا حالا فکر کردین تلگرام و یا سایر شبکه های اجتماعی چطوری از آپلود فایل تکراری جلوگیری میکنند ؟
اول میان هش فایل رو میگیرن و تو دیتابیس بهمراه اسم ذخیره و فایل رو آپلود میکنند
بعد کاربر دوم اگه خواست همون فایل رو آپلود کنه سیستم
هش فایل رو تو دیتابیس جستجو میکنه و اگه وجود داشته باشه فایل رو تو سرور آپلود نمیکنه
فقط یه اینسرت میزنه تو دیتابیس و یه ای دی جدید میده به کاربر میگه بیا اینم فایلت آپلود شد.

به همین راحتی :)

یه توضیح کوچوکو هم درمورد هش فایل
هش فایل داده های داخل فایل رو رمزنگاری میکنه و یه کد میده پس با تغییر نام یا تغییر پسوند فایل ، هش فایل تغییر نمیکنه

حالا من امروز یه کد نوشتم میتونه فایلهای تکراری هاست شما رو شناسایی و لیست کنه
شما هم میتونید از این کد تو آپلود سنتر یا هر جایی که دوست داشته باشید استفاده کنید

استفاده کنندگان محترم لطفا توجه داشته باشید این آموزش بصورت اختصاصی توسط بنده حقیر (امید آران (https://omidtak.ir))
کد نویسی شده و برای اولین بار در سطح نت بصورت رایگان منتشر میشه
پس خواهشا منبع آموزش رو در صورت انتشار قید کنید.



منبع : <a target='_blank' href='https://omidtak.ir/post/33'>شناسایی فایل های تکراری با هش فایل</a>


اینم کد



$sd=[];
$dir = dirname(__FILE__);
$files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($dir),RecursiveIterator Iterator::LEAVES_ONLY);
foreach($files as $name=>$file)
{
if(!$file->isDir())
{
$filePath = $file->getRealPath();
$md5File = md5_file($filePath);
$sd[$md5File]['duplicate'][] = ['filePath'=>str_replace($dir,'',$filePath),'fileMTime'=>date('Y-m-d H:i:s', $file->getMTime())];
}
}
$sd = array_filter($sd, function($c){return count($c['duplicate'])>1;});
echo '<pre>';
print_r($sd);
/*
اینم نمونه خروجی

Array
(
[54ac52e4d89fc97a13b06b8e8655abc9] => Array
(
[duplicate] => Array
(
[0] => Array
(
[filePath] => \dashboard\docs\images\backup-restore-mysql\image10.png
[fileMTime] => 2018-05-10 16:48:51
)

[1] => Array
(
[filePath] => \dashboard\docs\images\backup-restore-mysql\image14.png
[fileMTime] => 2018-05-10 16:48:51
)

)

)
)
*/

firebox
July 12th, 2022, 23:38
این روش برای پیدا کردن سریع فایل های دقیقا مشابه خوبه، یک مشکلی که این روش داره،کوچک ترین تغییر توی فایل حتی تقییر یک بایت فایل هش رو تغییر میده و دقت اش رو میاره پایین، مشکل دومش هم اینکه این روش برای پیدا کردن عکس ، فیلم و صوت مشابه با فرمت یا سایز مختلف کاربردی نداره.
برای پیدا کردن عکس مشابه الگوریتم هایی مثل Average hashing یا Perceptual hashing دقت خوبی دارن.
دقیق ترین روش برای پیدا کردن های فایل های مشابه (روشی که شرکت هایی مثل گوگل و فیسبوک استفاده میکنن)، بخصوص برای عکس ، فیلم و صدا استفاده از مدل های یادگیری ماشینی و گرفتن یک مدل خروجی وکتور و محاسبه فاصله فایل های مختلف با همدیگه هست.