• 26-03-2024, 19:36:45
    #1
    Merhaba arkadaslar, birkac haftadir bir ilan sitesi temasi üzerinde calisiyorum, bugun fark ettim ki media kütüphanesinden silinen görseller sunucudan silinmiyormus. sadece veritabani baglantilari silindigi icin media kütüphanesinde görünmüyor ama sunucudan bakinca orada saklanmaya devam ediyor, az önce birkac wp optimize eklentileri ile sorunu cozmeye calistim ama eklentiler yalnizca media library kismindaki görselleri görüyor, sunucu bazli analiz yapan eklenti göremedim.

    Benim sorunum su simdi, bu ilan sitesinde yuzlerce ilan acilacak ve zamanla benim temizlik yapmam gerekecek, tamam bazi eklentiler kullanilmayan gorselleri kütüphaneden siliyor iyi, ama sunucudan silmedikten sonra kutuphaneden silse ne yazar, buna bir cozum var mi acaba?
  • 26-03-2024, 20:04:27
    #2
    FatBotter.com
    Aşağıdaki kod WordPress veritabanını ve `wp-content/uploads` dizinini tarayarak, görselleri kontrol edecek ve ilişkili bir yazı/post bulunmazsa bu dosyaları ve veritabanındaki kayıtlarını silecektir. Betiği çalıştırmadan önce, WordPress veritabanı bilgilerinizle ve dosya dizin yollarınızla ilgili değişiklikleri yapmayı unutmayın. Ayrıca yedekleme yapmadan bu işlemi sakın denemeyin. Kodları kontrol etmedim ancak çalışacağını düşünüyorum. Bir php dosyası oluşturup kodları içine yapıştırın veritabanı bilgilerinizi de güncelleyin ardından $wp_upload_dir değişkenindeki yolu da düzeltin. Eğer wordpress veritabanı tablolarınızdaki ön ek wp_ değilse koddaki tüm wp_ alanlarını da sizin ön ekiniz ile değiştirmeyi unutmayın.

    Aşağıdaki kodları temizlik.php dosyası oluşturup cronjob'a eklerseniz düzenli olarak arka planda kontrol edip kütüphanenizi temizleyecektir.


    // WordPress veritabanı bilgileri
    $db_name     = 'your_db_name';
    $db_user     = 'your_db_user';
    $db_password = 'your_db_password';
    $db_host     = 'localhost';
    
    // WordPress dosya sistemi
    $wp_upload_dir = '/path/to/wordpress/wp-content/uploads';
    
    // Veritabanı bağlantısı
    $mysqli = new mysqli($db_host, $db_user, $db_password, $db_name);
    
    if ($mysqli->connect_error) {
        die("Bağlantı hatası: " . $mysqli->connect_error);
    }
    
    // Görsellere ait kayıtların çekilmesi
    $sql = "SELECT * FROM wp_postmeta WHERE meta_key = '_wp_attached_file'";
    $result = $mysqli->query($sql);
    
    if ($result->num_rows > 0) {
        while($row = $result->fetch_assoc()) {
            $file_path = $wp_upload_dir . '/' . $row['meta_value'];
            $post_id = $row['post_id'];
    
            // Post kontrolü
            $post_check_sql = "SELECT * FROM wp_posts WHERE ID = $post_id";
            $post_check_result = $mysqli->query($post_check_sql);
    
            // İlişkili post yoksa sil
            if ($post_check_result->num_rows == 0) {
                // Dosyayı sil
                if (file_exists($file_path)) {
                    unlink($file_path);
                    echo "Silindi: " . $file_path . "\n";
                }
    
                // Veritabanı kaydını sil
                $delete_sql = "DELETE FROM wp_postmeta WHERE meta_id = ".$row['meta_id'];
                if ($mysqli->query($delete_sql) === TRUE) {
                    echo "Veritabanından silindi: " . $row['meta_id'] . "\n";
                } else {
                    echo "Hata: " . $mysqli->error . "\n";
                }
            }
        }
    } else {
        echo "Görsel kaydı bulunamadı.";
    }
    
    $mysqli->close();
  • 26-03-2024, 20:37:13
    #3
    lookout adlı üyeden alıntı: mesajı görüntüle
    Aşağıdaki kod WordPress veritabanını ve `wp-content/uploads` dizinini tarayarak, görselleri kontrol edecek ve ilişkili bir yazı/post bulunmazsa bu dosyaları ve veritabanındaki kayıtlarını silecektir. Betiği çalıştırmadan önce, WordPress veritabanı bilgilerinizle ve dosya dizin yollarınızla ilgili değişiklikleri yapmayı unutmayın. Ayrıca yedekleme yapmadan bu işlemi sakın denemeyin. Kodları kontrol etmedim ancak çalışacağını düşünüyorum. Bir php dosyası oluşturup kodları içine yapıştırın veritabanı bilgilerinizi de güncelleyin ardından $wp_upload_dir değişkenindeki yolu da düzeltin. Eğer wordpress veritabanı tablolarınızdaki ön ek wp_ değilse koddaki tüm wp_ alanlarını da sizin ön ekiniz ile değiştirmeyi unutmayın.

    Aşağıdaki kodları temizlik.php dosyası oluşturup cronjob'a eklerseniz düzenli olarak arka planda kontrol edip kütüphanenizi temizleyecektir.


    // WordPress veritabanı bilgileri
    $db_name     = 'your_db_name';
    $db_user     = 'your_db_user';
    $db_password = 'your_db_password';
    $db_host     = 'localhost';
    
    // WordPress dosya sistemi
    $wp_upload_dir = '/path/to/wordpress/wp-content/uploads';
    
    // Veritabanı bağlantısı
    $mysqli = new mysqli($db_host, $db_user, $db_password, $db_name);
    
    if ($mysqli->connect_error) {
        die("Bağlantı hatası: " . $mysqli->connect_error);
    }
    
    // Görsellere ait kayıtların çekilmesi
    $sql = "SELECT * FROM wp_postmeta WHERE meta_key = '_wp_attached_file'";
    $result = $mysqli->query($sql);
    
    if ($result->num_rows > 0) {
        while($row = $result->fetch_assoc()) {
            $file_path = $wp_upload_dir . '/' . $row['meta_value'];
            $post_id = $row['post_id'];
    
            // Post kontrolü
            $post_check_sql = "SELECT * FROM wp_posts WHERE ID = $post_id";
            $post_check_result = $mysqli->query($post_check_sql);
    
            // İlişkili post yoksa sil
            if ($post_check_result->num_rows == 0) {
                // Dosyayı sil
                if (file_exists($file_path)) {
                    unlink($file_path);
                    echo "Silindi: " . $file_path . "\n";
                }
    
                // Veritabanı kaydını sil
                $delete_sql = "DELETE FROM wp_postmeta WHERE meta_id = ".$row['meta_id'];
                if ($mysqli->query($delete_sql) === TRUE) {
                    echo "Veritabanından silindi: " . $row['meta_id'] . "\n";
                } else {
                    echo "Hata: " . $mysqli->error . "\n";
                }
            }
        }
    } else {
        echo "Görsel kaydı bulunamadı.";
    }
    
    $mysqli->close();
    Harika oldu çok teşekkür ederim
  • 26-03-2024, 20:44:40
    #4
    eğer çok yüksek sayıda resim dosyası olacak ise ayrıca resim sunucusunu ayırmanızda fayda olacaktır.
    örnek : bknz
  • 26-03-2024, 21:35:31
    #5
    lookout adlı üyeden alıntı: mesajı görüntüle
    Aşağıdaki kod WordPress veritabanını ve `wp-content/uploads` dizinini tarayarak, görselleri kontrol edecek ve ilişkili bir yazı/post bulunmazsa bu dosyaları ve veritabanındaki kayıtlarını silecektir. Betiği çalıştırmadan önce, WordPress veritabanı bilgilerinizle ve dosya dizin yollarınızla ilgili değişiklikleri yapmayı unutmayın. Ayrıca yedekleme yapmadan bu işlemi sakın denemeyin. Kodları kontrol etmedim ancak çalışacağını düşünüyorum. Bir php dosyası oluşturup kodları içine yapıştırın veritabanı bilgilerinizi de güncelleyin ardından $wp_upload_dir değişkenindeki yolu da düzeltin. Eğer wordpress veritabanı tablolarınızdaki ön ek wp_ değilse koddaki tüm wp_ alanlarını da sizin ön ekiniz ile değiştirmeyi unutmayın.

    Aşağıdaki kodları temizlik.php dosyası oluşturup cronjob'a eklerseniz düzenli olarak arka planda kontrol edip kütüphanenizi temizleyecektir.
    kod icin tesekkürler, suan manuel temizlik yaparken sunucu cache tuttugu icin isime ara vermek zorunda kaldim, sunucudan silinen görseller hala sitede ve media kütüphanesinde görünmeye devam ediyor her yerden sildim ama sunucuya ssh erisimi yok diye bisey yapamadim, yarina toparlanir.

    kodu test edecegim en yakin zamanda.



    arberotum adlı üyeden alıntı: mesajı görüntüle
    eğer çok yüksek sayıda resim dosyası olacak ise ayrıca resim sunucusunu ayırmanızda fayda olacaktır.
    Öneri icin tesekkürler, fakat önce para kazanmak gerekiyor ki daha uzun vadede yatirim yapilabilsin, ve bildigim kadariyla ayri depolama sunucusu almakla kendi sunucunu büyütmek assagi yukari ayni maliyetlere geliyor. bundan dolayi buyuk bir sermaye ile girmeyen kisiler icin baslangic olarak bu sekilde yatirim yapmalari akillica olmaz sanirim. simdilik limitsiz disk, 1m iopslu, 2v4 paylasimli kullaniyorum site biraz is yapsin ilk isim 6v12 VPS almak olacak daha sonraki kademe dedicated zaten