[Ask] [php] dinamik dosya var bulmak

2 Cevap php

i am writing a cache module in php. it tries to write a cache with a $string+timestamp as a filename. i dont have problem with writing the cache.

Sorun i istediğiniz önbellek almak için bir foreach döngü yapmak olduğunu.

Bu i önbelleği almak için kullanmak mantığı

foreach ($filenames as $filename){ 
    if(strstr($filename,$cachename)){//if found 
        if(check_timestamp($filename,time()))
                          display_cace($filename);  
        break;
    } 
}

Bu önbellek almak ve okumak için çalıştığında ancak, aşağı sunucuyu yavaşlatır. i bir klasöre 10000 önbellek dosyası var ve ben bu önbellek klasöründe her dosya için kontrol etmek gerekir düşünün.

yani nasıl bunu yapmanın en iyi yolu düşünüyorum.

bile beni hala benim yazılı soru anlamıyorum çünkü burada ben, tekrar açıklayayım ..: D

i write cache file with this format filename_timestamp.. e.g cache_function_random_news_191982899010 in a folder ./cache/

when i want to get the cache, i only pass "cache_function_random_news_" and check recursively on that folder. if i find something with that needle on a file name, display it, and break.

ama bir klasörde 10000 dosyalar üzerinde ardışık kontrol iyi bir şey evet değil mi?

2 Cevap

Dosya adının bir parçası olarak zaman damgası depolamak, ama bu sizin için mantıklı bir formatta alınan içerik ile birlikte dosyada saklamayın. Örneğin:

Dosya /cache/cache_function_random_news:

191982899010
stored content

Dosyanın ilk satırı gerektiğinde okuyabilirsiniz damgası, örneğin içerir periyodik önbelleğini temizleyerek zaman. Dosyanın kalan önbelleğe içerik içermektedir. Başka bir olasılık tefrika diziler kullanmak olacaktır. Her iki şekilde de, bu önbelleği okumak için önemsiz kılar:

if (file_exists('cache/cache_function_random_news')) ...

Tarayıcılar ve web sunucuları bir "indeks" koruyarak önbellek bakım soruna. Bir dosya (ikili / metin) veya bir veritabanı ya bu endeksi koruyabilirsiniz.

Örneğin:

  1. Eğer yeni bir önbellek dosyası oluşturmak zaman, tablo / dosyasına bir satır / girdisini ekleyin.
  2. Sonra sadece hızlı önbellek dosyası varlığını aramak için tablo / dosya kullanmak
  3. Ayrıca rekor bir bayrak kullanarak gereksiz / eski dosyaları işaretleyebilirsiniz
  4. Sonra periyodik olarak (Cron iş veya başka bir tekniği kullanarak) eski önbellek dosyalarını silin.

Bu yaklaşım, büyük ölçüde performansını artıracaktır.