Doğru Cevap
-
$myDirectory = opendir("../incoming/"); while($entryName = readdir($myDirectory)) { $dirArray[] = $entryName; } $sor - mysql_query("SELECT resimler FROM resimler"); while ($al = mysql_fetch_object($sor)){ $kr[] = $al->resimler; } foreach ($dirArray as $dosya): if (!in_array($dosya, $kr)) { unlink('serveryolu/'.$dosya); } endforeach;
boyle silebilirsin ama serveryolu relative olmamali absolute olmali-
teacher0610
Teşekkürler...12 yıl önce yazılmış
-
Cevaplar
-
Ben olsam db'den getirip tek tek kontrol edip silmek yerine "create tarihi 3 saat ve öncesi olanları sil" derdim.
Ayrıca, dizide aramayı da for döngüsü ile değil php'deki "in_array()" komutuyla yapardım.-
teacher0610
İyi de o 3 saat içinde oluşturulan dosyalar db ye kayıt edildiyse silinmemesi gerekiyor.12 yıl önce yazılmış
-
-
İlk olarak, unlink'i kullandığın yerde $dosya değişkenini echo ile yazdırınca ne görüyorsun?
Bir iki düzeltme:
Öncelikle, $varmi yerine, sana bir array verecek olan şu fonksiyonu kullanabilirsin:$kayitli_olmayanlar = array_diff($dirArray, $kr);
İkincisi, $al->resimler dediğine göre birden varsa resim olduğunu varsayıyorum. Dolayısıyla $kr resimlerin listesi (array) değil, resim listelerinin listesi (array of arrays) oluyor. Bu durumda yapman gereken $kr[] ile eklemek değil,$kr = array_merge($kr, $al->resimler);
kullanmaktır. elbette $al->resimler veritabanında TEXT olarak saklanıyorsa $al->resimler'i explode ile örneğin "\n"lerden bölüp o şekilde işlemek gerekecektir.-
curlyhair
Ben olsam kayıt esnasında bir alan daha oluştururum. Resim kayıt edildiyse bu alanı update ile 1 yaparım edilmediyese 0 yaparım silerkende
0 olanları sil derim daha en başta bu işlemi yapmalısın önizleme esnasında update 1 ya da 0 olmalı.12 yıl önce yazılmış
-
-
iş php olunca bir sorunun 100 tane cevap bile cıkabılıor. :D ben normalde bu tür sorunları söyle cözüyorum.. db dekı tum dosyaları baska bı klasore cekıorm.. kalanları manuel sılıorum