Merhaba ilan sitem var ve verilen ilanlar satılıyor, kullanıcı tarafından kaldırılıyor , bazende hiç onaylanmadan siliniyor fakat ftpde tüm resimler saklanıyor hatta 2 yıl oncesinin ilan resmi bile mevcut ben bu resimlerin veri tabanından silinmiş olanları (kullanılmayanları) bulup kaldırmak ftp yi rahatlatmak istiyorum
mysqlde >> ilanlar tablosunda >> id | resim
ftpde ise /images/resimler kalsöründe
Fikirlerinize ihtiyacım var teşekkürler.
Basit bir class hazırladım eğer kullanırsan öncelikle yedek alıp önce lokalde test edip işlemi gerçekleştirmeni rica ediyorum test etme fırsatım pek olmadı
class Cleaner{
private $conf = [];
private $db;
public function __construct($conf){
if(!is_array($conf)) die('Gerekli parametreleri iletin');
$this->conf = [
"MYSQL_HOST" => $conf['MYSQL_HOST'],
"MYSQL_USER" => $conf['MYSQL_USER'],
"MYSQL_PASS" => $conf['MYSQL_PASS'],
"MYSQL_NAME" => $conf['MYSQL_NAME'],
"MYSQL_TABLE" => $conf['MYSQL_TABLE'],
"MYSQL_FIELD" => $conf['MYSQL_FIELD'],
"PATH" => $conf['PATH']
];
$this->db = new mysqli($conf['MYSQL_HOST'], $conf['MYSQL_USER'], $conf['MYSQL_PASS'], $conf['MYSQL_NAME']);
}
public function start(){
$thumbs = $this->getThumbs();
//$this->dump($thumbs);
if(false == $thumbs) die('İstenilen klasör boş');
foreach($thumbs AS $thumb){
$status = $this->query($thumb);
}
}
private function query($thumb){
$result = $this->db->query('SELECT COUNT(id) AS total FROM '.$this->conf["MYSQL_TABLE"].' WHERE '.$this->conf["MYSQL_FIELD"].' = "'.$thumb.'"')->fetch_object();
if($result->total == 0){
$this->deleteFile($thumb);
}
}
private function getThumbs(){
$path = $this->conf['PATH'];
$extensions = ['jpg', 'jpeg', 'png', 'gif', 'bmp'];
$files = [];
$directory = new DirectoryIterator($path);
foreach ($directory as $fileinfo) {
if ($fileinfo->isFile()) {
$extension = strtolower(pathinfo($fileinfo->getFilename(), PATHINFO_EXTENSION));
if (in_array($extension, $extensions)) {
$files[] = $fileinfo->getFilename();
}
}
}
if(empty($files)) return false;
return $files;
}
private function deleteFile($thumb){
unlink($this->conf['PATH']."/".$thumb);
$this->success($thumb);
}
private function success($thumb){
echo ''.$this->conf['PATH'].'/'.$thumb.' Dosyası silindi <hr>';
}
private function dump(array $arr){
echo '<pre>';
print_r($arr);
echo '</pre>';
}
}
Kullanımı
$c = new Cleaner([
"PATH" => "resimler",
"MYSQL_HOST" => "localhost",
"MYSQL_USER" => "root",
"MYSQL_PASS" => "root",
"MYSQL_NAME" => "ilanlar",
"MYSQL_TABLE" => "ilanlar",
"MYSQL_FIELD" => "resim"
]);
$c->start();