Düğümlere eklenen dosyalar, düğümden kaldırıldıktan (ve bu düzenleme kaydedildikten) sonra bile sunucudan asla silinmez, Drupal 7


10

Sitemde garip bir şey fark ettim: Düğüme bir dosya ekledikten sonra (normal dosya alanı aracılığıyla), bu dosya sunucudan asla silinmez . Düğümden kaldırıyorum, bu değişikliği kaydediyorum, ancak dosyanın hala sunucuda olduğunu görebiliyorum.

Bu, dosyaların değiştirilmesini çok zorlaştırır, çünkü bir kullanıcı bir değişiklik eklemeye çalıştığında, dosya adında "_0" veya "_1" soneki vardır (orijinal dosya hala sunucuda olduğundan ve bu ad yineleniyorsa) . Bu, dosyanın tüm bağlantılarını bulmamız ve her birini yeni dosya adı / url ile eşleşecek şekilde düzenlememiz gerektiği anlamına gelir. Bu tam bir karmaşa.

Çevrimiçi bakıyorum ve kimse bu sorunu var gibi görünüyor - düğümden kaldırıldıktan sonra dosyalar sunucudan silinmelidir.

Benim durumumda bunun olabileceğine dair bir fikrin var mı? Nereden bakacağımdan emin değilim. Kesinlikle 'Dosya sistemi' yapılandırma sayfasında, kontrol edilmiş olabilecek bir seçenek olarak bu nitelikte hiçbir şey yoktur. Ve alan seçeneklerinin kendileri, yanlışlıkla ayarlamış olabileceğim hiçbir şeye sahip değilmiş gibi görünüyor. Başka fikir var mı?


Doğru anlarsam, hemen silinmez ancak silinmek üzere işaretlenir. İşaretlendikten sonra cron koşusunda temizlenir. Tablo temizleme ile aynı durum söz konusudur.
junedkazi

İyi düşünmek. Bunu test ettim ve dosyalar birkaç cron çalıştırıldıktan sonra bile silinmez.
Boriana Ditcheva

Yanıtlar:


17

Anladım! Bu bir revizyon işi. Sanırım mantıklı. Bu içerik türü için revizyonları etkinleştirdiyseniz , tüm eski dosyalarınızı sunucuda tutar (eski revizyonlarla ilişkilendirilir), bu nedenle bir dosyayı değiştirmek kesinlikle daha zordur. Kaldırmaya ve düğüme yeniden eklemeye çalışırsanız, sorum / bağlantı, sorumda belirttiğim gibi güncellenir. Bu ada sahip bir dosya sunucuda tutulduğundan ve bir ad yinelemesi olduğundan, bu dosya adının gelecekteki yüklenen sürümlerine "_0", "_1" vb. Sonekleri ekler.

Bunun neden olduğunu anlıyorum, çünkü revizyonun tüm noktası sayfanın herhangi bir geçmiş sürümüne geri dönebiliyor.

Geçici çözüm, eski düzeltmeyi, değiştirmeye çalıştığınız dosyayı içeren 'Revizyon' veya 'Orta' sekmesinden (Workbench Moderation kullanıyorsanız) silebilmenizdir. Sonra tekrar yükleyin ve ad geri dönüp o dosyayı işaret eden herhangi bir bağlantıyı düzenlemek zorunda kalmadan eşleşmelidir.

Bu mantıklı ve başka birine de yardım umuyoruz!


4

(Dosya adını korurken dosyaları değiştirmek isteyen) aynı kullanım durumu vardı ve özel bir modülde aşağıdaki kod bu hedefe ulaştı. Bu kod, Entity API modülüne dayanmaktadır, bu nedenle modül .info dosyanıza bağımlılık olarak eklenmelidir. Geribildirim hoş geldiniz.

Bu, 'Kaldır'ı tıkladıktan sonra düğümü kaydettikten sonra dosyaları hemen silmenizi sağlar. Uyarı: Bu aynı zamanda bir dosyayı kaldırdığınızda ve düğümü kaydettiğinizde, önceki bir düzeltmeye geri dönerek o dosyayı geri alamayacağınız anlamına gelir.

/**
 * Implements hook_node_update().
 *
 * Delete files from old node revisions.
 */
function MYMODULE_node_update($node) {
  // Array of content types to act on.
  if (in_array($node->type, array('page', 'article'))) {
    $wrapper = entity_metadata_wrapper('node', $node);
    $original_wrapper = entity_metadata_wrapper('node', $node->original);

    // Array of file fields to act on.
    foreach (array('field_public_files', 'field_private_files') as $field) {
      if (!isset($original_wrapper->{$field})) {
        continue;
      }
      $current_files = array();
      $original_files = array();
      // Get files that were attached to the original node (before update).
      foreach ($original_wrapper->{$field}->value() as $file) {
        $original_files[] = $file['fid'];
      }
      // Stop if there were no files previously attached.
      if (empty($original_files)) {
        continue;
      }
      // Get files currently attached to the node (after update).
      foreach ($wrapper->{$field}->value() as $file) {
        $current_files[] = $file['fid'];
      }
      // Delete files that were in the original node but were removed during
      // this update.
      $deleted_files = array_diff($original_files, $current_files);
      foreach ($deleted_files as $fid) {
        if ($file = file_load($fid)) {
          // Delete all usages of the file. Each node revision adds to the usage
          // count.
          file_usage_delete($file, 'file', 'node', $node->nid, 0);
          file_delete($file);
        }
      }
    }
  }
}

kodu nereye koymalıyız.
BandOfBrothers

Cevap orijinal isteği aramıyordu, ama sadece isabetli buldum. Burada paylaştığınız için teşekkürler!
texas-bronius


0

Bu, sunucuda bir izin sorunu olabilir. Temiz bir kurulumda aynı şeyi deneyin - aynı sorunu yaşıyorsanız, Drupal'a değil sunucuya bağlıdır.

Günlüklerde bir şey var mı?


Sadece izin sorunları için test ettim. Kişisel makinemde sitenin yerel bir kopyası var ve sorun da orada. Ancak, temiz bir yüklemede dosyalar gerçekten silinir. Sorunlu sitemde, bağlı oldukları tüm düğümü sildikten sonra bile dosyalar silinmiyor. Drupal kurulumumda buna neden olabilecek başka fikirler. Bir modül olması gerektiğini varsayıyorum ...
Boriana Ditcheva

En azından kurulumu bitirdiniz. Hangi modülleri kullanıyorsunuz? Herhangi bir özel / çatal / dev modülleri?
Aram Boyajyan

0

Eski revizyonları silme veya ekli dosyalar olmadan düğümleri kaydetme ve geri dönme konusunda şansım olmadı. Her zaman işe yarayan tek şey bunlar:

  1. Düğümü silme
  2. Düğümü düzenleyerek ve dosyayı sunucudan el ile silerek dosyayı kaldırma.

İkinci seçenekten kesinlikle nefret ediyorum, bu yüzden burada başka bir çözüm arıyorum.

(D6 çalıştıran bir grup müşterim olduğu için de sınırların dışına çıkabilirim.)


Bu konuda uzun zaman önce bir bilet başlattım: drupal.org/node/1816584 . İsterseniz zil yapın ve belki de ek sesler varsa bu konuda daha ciddi bir tartışma olabilir.
Boriana Ditcheva

0

Ben de bu sorunu karşılaştığım tezgah yönetimi ile, ve aynı adı taşıyan dosyalar bir belgenin farklı revizyonlarında yeniden yüklendiğinde yüklenen dosyaların eski sürümlerini gösteren dosya alanı ekleme.

İşlerin düzgün çalışmasını sağlamak için düğümün vid'ini dosya yükleme yoluna bir klasör olarak ekleyin. Normalde böyle bir şey yapıyorum.

Klasör yolu = varlıklar / [düğüm: nid] - [düğüm: başlık] / [düğüm: vid]

Evet, alt klasör deliliği olan çirkin uzun klasörlerdir, ancak düğüm kimliği veya başlık ile dosyaları gerçekten kolayca bulabilirsiniz ve daha sonra alt klasör, aynı dosyanın birçok sürümünü aynı ada sahip tutabilmeniz için ad çakışmalarını önler. Daha sonra alanı temizlemek istiyorsanız eski düzeltmeleri silebilirsiniz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.