Была задача найти повторные фотографии и удалить их.
TODO: Скрипты рабочие, но не сделаны как набор отдельных файлов, нужно бы привести все в нормальный вид.
В принципе отрабатывает намного быстрее чем мог себе представить (примерно, 40 сек 10 000 файлов), т.ч. первый и второй скрипт можно объединить.
- 1 - индексация
- 2 - добавление md5
- 3 - перемещение (вместо удаления), повторных.
<?php
require('fso.php');
$oFSO = new Oddler\SOLib\classes\FSO();
$oDir = $oFSO->linkDir('d:/Pic/');
$aList = $oDir->scan(array('KeepFullNames'=>TRUE));
$aRet = [];
$i=0;
foreach($aList['Files'] as $sFile)
{
echo $sFile. '<br />';
$oFile = new stdClass();
$oFile->path = $sFile;
$oFile->size = filesize($sFile);
$aRet[$oFile->size][] = $oFile;
$i++;
}
echo '$i: '.$i. '<br />';
echo '<pre>';
print_r($aRet);
echo '</pre>';
file_put_contents('out.json', serialize($aRet));
<?php
$aItems = unserialize(file_get_contents('out.json'));
$i=0;
$iMax = 0;
$iMaxPos = 0;
$aResult = [];
foreach($aItems as $sSize => $aFiles)
{
$iCount = count($aFiles);
/*
if($iCount > $iMax)
{
$iMax = $iCount;
$iMaxPos = $sSize;
}
*/
if( $iCount > 1)
{
// echo '<h1>'.$sSize.'--'.$iCount.'</h1><br />';
/*
?>
<table>
<?
*/
foreach($aFiles as $oFile)
{
if(!file_exists($oFile->path))
{
continue;
}
$i++;
$oFile->md5 = md5_file($oFile->path);
$aResult[$sSize][] = $oFile;
/*
?>
<tr>
<td>
<img src="file:///<?=$oFile->path;?>"/>
<hr/>
</td>
</tr>
<?
*/
}
/*
?>
</table>
<?*/
}
/*
if($i > 3)
{
break;
}
*/
}
file_put_contents('out2.json', serialize($aResult));
<?php
$aItems = unserialize(file_get_contents('out2.json'));
$i=0;
foreach($aItems as $sSize => $aFiles)
{
$iCount = count($aFiles);
echo '<h1>'.$sSize.'--'.$iCount.'</h1><br />';
$j=0;
foreach($aFiles as &$oFile1)
{
$i++;
for($i1 = $j; $i1 < $iCount; $i1++)
{
$oFile2 = $aFiles[$i1];
if($oFile1->path != $oFile2->path)
{
if($oFile1->md5 == $oFile2->md5)
{
$oFile1->duble = 1;
rename($oFile1->path, str_replace('d:/Pic/', 'd:/Pic2/', $oFile1->path));
}
}
}
$j++;
}
/*
echo '<pre>';
print_r($aFiles);
echo '</pre><hr />';
if($i > 3)
{
break;
}
*/
}
/*
echo '<pre>';
print_r($aItems);
echo '</pre>';
file_put_contents('out3.json', serialize($aItems));
*/