PHP sunucu tarafı çıkış önbelleğe alma yapmak için en iyi yolu nedir?

5 Cevap php

Ben oldukça karmaşık bir index.php şimdi var ve ben sadece bir kez her saat çalıştırmak istiyorum. Bunu başarmak için en iyi yolu nedir? Ben yaşadım bazı fikirler

  • Ben bu APC için ne değildir hissediyorum ve muhtemelen benim sitenin diğer bölümlerine kötü bir şey yapıyor olacak - apc_store($page, 60*60*) ile APC koy
  • Bir yerde bir dosya sistemine çıktı kaydet - Sonra apache ihtiyaçları yazma erişimi yerde bir ağrı olabilir ki
  • Her nasılsa kurulum benim için önbelleğe alma yapmak için apache - Bu mümkün mü?

5 Cevap

I went with a slight variation on Rowlf's and jamietelin's answer.

3 dosyaları oluşturun:

index.html

<meta http-equiv="refresh" content="0;url=/index_update.php" />

index.php

<?php // do all your normal stuff ?>

index_update.php

<?php

$file = "index.html";
$time = 60 * 10 - (time() - filemtime($file));

# this is on the first install 
if (filemtime($file) != filectime($file))
    $time = 0;

if ($time > 0) {
    die("Data was already updated in the 10 minutes. Please wait another " . ($time) . " seconds.");
}

ob_start();
require "index.php";
$data = ob_get_contents();

$fp = fopen($file, "w");
fwrite($fp, $data);
fclose($fp);

header("Location: /");

Ve sonra cronjob:

*/15 * * * * curl http://example.com/index_update.php

Birisi bir üretim bas sonra sayfada stumbles Yani, eğer, sadece şeffaf, aksi takdirde sizin cronjob her 15 dakikada yapacak, sizin için yeni bir index.html oluşturmak olacaktır.

Sadece emin index.html apache sunucu tarafından yazılabilir olduğundan emin olun. Bu korkutucu geliyorsa, o zaman sadece index.html yazma ayrıcalıkları ile başka bir kullanıcı olarak cronjob çalıştırmak php index_update.php olun. Gerçi tüm apache ortamına erişim olmayacaktır.

Yorumlarınızı bekliyoruz, bu yardımcı olur umarım.

  1. Bir ziyaretçi sayfanızı çarptığında, içerik üretmek o kullanıcıya göndermek ve diskteki bir yere statik bir dosyaya kaydedin.
  2. When the next visitor comes, first look for the saved file, and if it exists, serve that rather than execute all the code in your index.php file. A basic example would be

    if (file_exists($cacheFileName))
    {
        require $cacheFileName;
        exit;
    }
    
    
    // here goes the rest of your index.php code
    //..
    
    
    // assuming your output is buffered and is contained in $output:
    echo $output;
    
    
    $cacheFileName = '/path/to/your/file.inc';
    file_put_contents($cacheFileName, $output);
    
  3. Set up a cron job that will delete your saved cache file from disk every hour or as often as you need to. Alternatively, in your index.php, on every page hit check how long ago the cached file was created and generate a new cache file if it's been around longer than you'd want it to. A cron job is easier to set up though.

Ayrı dosyalar diske oluşturulan çıkış tasarruf muhtemelen üçüncü parti önbelleğe alma çözümleri güvenmek istemiyorsanız en iyi yolu olsa, derin felsefi soruyu cevaplamak için. APC gerektiğinde sayfaları oluşturacaktır kod önbelleğe alma için iyi olduğunu ve bir küçük (imsi) uygulaması bahsediyoruz eğer memcached kesinlikle overkill.

Statik sayfaları sunan her zaman en optimum yoldur. Yani bir kez indeksi statik bir sürümünü her saat oluşturmak ve bir dosya, örnek index.html bunu yazmak zorunda, örneğin Cron'un, veya seçtiğiniz herhangi bir diğer program hizmeti için kullanın. Hatta bunu gibi üretmek olabilir. Hala endeksi bazı dinamik bölümlerini gerekirse php.

Bu mutlak iyi yolu olduğunu söyleyebilirim. Tabii ki dosya için chmod ayarını işlemek için bazı küçük ağrı, ama bir sorun büyük değil.

Gerçekten Memcached bir göz atmalısınız (mükemmel php desteği.)

Başka iyi bir seçenek kurulum için bir Squid Cache Server olduğunu.

Statik bir dosyaya sayfayı kaydedin ve statik bir sayfa sunmak için. Htaccess kurallarını kullanın.

Ben tam detayları emin değilim, ama ben drupal CodeIgnitor ve boost bunu düşünüyorum.