Otomatik x-bir süre sonra tüm dosyaları silmek

3 Cevap php

Sunucu veya pl bir cronjob komutunu kullanmadan - Nasıl otomatik (24 saat sonra diyelim) x-süre sonra bir alt dizinin altındaki tüm dosyaları silerim. Bunu nasıl yapabilirim sadece PHP kodu kullanılarak ya da sadece bir şey ve komut otomatik çalışır tıklayarak olmadan sayfasını ziyaret ederek.

3 Cevap

Benim ilk cevaptan son Yorumlarınız için yanıt. Ben kod örneği yazmak için gidiyorum, bu yüzden başka bir cevap yerine ek bir açıklama daha yarattık.

Özel uzantılı dosyaları kaldırmak için, kodu uygulamak zorunda:

<?php
  $path = dirname(__FILE__).'/files';
  if ($handle = opendir($path)) {

    while (false !== ($file = readdir($handle))) {
        if ((time()-filectime($path.'/'.$file)) < 86400) {  // 86400 = 60*60*24
          if (preg_match('/\.txt$/i', $file)) {
            unlink($path.'/'.$file);
          }
        }
    }
  }
?>

Comment:. 1 Bu örnek, bir uzantıya sahip, sadece içerik txt kaldırılması amacıyla, yani, normal ifade /\.txt$/i kullanır. '$' Işareti anlamına gelir, bu dosya adı dize ile sona zorundadır '. Txt'. Bayrak 'i' gösterir, bu karşılaştırma harf duyarsız olacaktır. preg_match() fonksiyonu hakkında daha fazla.

Eğer belirli uzantılara sahip dosyaları aramak için strripos() işlevini kullanabilirsiniz yanında. İşte kod parçacığını:

<?php
  $path = dirname(__FILE__).'/files';
  if ($handle = opendir($path)) {

    while (false !== ($file = readdir($handle))) {
        if ((time()-filectime($path.'/'.$file)) < 86400) {  // 86400 = 60*60*24
          if (strripos($file, '.txt') !== false) {
            unlink($path.'/'.$file);
          }
        }
    }
  }
?>

Comment: Bu örnek, daha belirgin görünüyor. strrpos(strtolower($file), '.txt'), ama IMHO, onu daha okunabilir ve daha küçük yapmak için kodu daha az işlevleri kullanmak için iyi bir kural: strripos() de bir iki fonksiyonları birleştirerek elde edilebilir Sonucu . () Function (dönüş değerleri blok) strripos ait sayfasında uyarı dikkatle okuyunuz.

One more important notice: UNIX sistemi kullanıyorsanız eğer, kaldırılması nedeniyle dosya dosya izinleri başarısız olabilir. Sen chmod() fonksiyonu hakkında kılavuzu kontrol edebilirsiniz.

İyi şanslar.

PHP temel fonksiyonlarını filectime() kullanabilir ve unlink() dosya oluşturma saatini kontrol ve dosya / dosyaları silmek için.

EDIT. Code example:

  if ($handle = opendir('/path/to/files')) {

    while (false !== ($file = readdir($handle))) {
        if (filectime($file)< (time()-86400)) {  // 86400 = 60*60*24
          unlink($file);
        }
    }
  }

Ben AT komutu kabuk kullanmak, olsa bir cronjob gibi

php:

exec("echo rm /somedir/somefile.ext|at now +24 hours");