Opcode APC önbelleğe alma ve eksik dosyalar

3 Cevap php

Biz bir opcode önbellek olarak APC kullanıyor. Bir dosyanın olmayan varlığını önbelleğe için APC almak için bir yolu var mı? Biz apc.stat = 0 ve apc.include_once_override = 1 belirledik. include_once dosya sistemi mevcut olmayabilir, bir dosya üzerinde çağrı performansını artırmak için yapacak daha çok şey var mı? Varsa, belli ki bunu eklemek istiyorum. Bu mevcut değilse Ancak, never mevcut olacak ve biz PHP kontrol etmek için her istek üzerine dosya üzerinde open() aramak istemiyorum.

Bazı arka plan için: Biz bir tabanı site var ama bir müşteri tarafından müşteriye bazda siteye özelleştirmeleri sağlamak. Bazı müşteriler, özel bir giriş sayfası var diğerleri tamamen benzersiz sayfaları var vs

Biz, bize gerekli denetleyicileri geçersiz kılmak için izin biraz alışılmadık bir şekilde Zend Framework kullanarak ediyoruz. Sitemiz Bir dosya içinde tanımlanmış LoginController adında bir denetleyici, olabilir controllers/LoginController.php. Ancak, bizim müşteri "Şirket" özel bir giriş sayfası için bir gereklilik olabilir, bu yüzden Company_LoginController controllers/company/LoginController.php bir dizin tanımlı adında yeni bir sınıf yazacağız. (Bu adlandırma kuralı bize "modüller" Zend Framework kavramı ile tutarlı olmasını sağlar.)

Biz sınıf ile uğraşırken, biz temelde böyle bir şey yapın:

include_once APPLICATION_PATH . '/controllers/company/LoginController.php';
if (class_exists("Company_LoginController")) {
    echo 'customer-specific controller exists';
} else {
    include_once APPLICATION_PATH . '/controllers/LoginController.php';
    echo 'customer-specific controller does not exist; using default';
}

Dosya /controllers/company/LoginController.php varsa, APC ilk istek üzerine önbelleğe ve yeniden dosya sisteminden almak asla. Dosya /controllers/company/LoginController.php gelmez not varsa, ancak, ben APC birden fazla kez bu dosyanın varlığını kontrol etmek istemiyorum. Bunun gerçekleşmesi için herhangi bir şekilde?

3 Cevap

Sadece şirket dizininde boş dosyaları oluşturabilir miyim? APC iki kez yük olmayacak, çünkü sunucusu başlatıldığında ilk defa "yüklü" olsun bazı boş dosyaları olan hiçbir zararı yoktur.

jmucchiello cevabı sadelik benim oy alır, ama pratik değil nedense, her zaman şeyleri zor yoldan yapabileceğini.

Aşağıdaki kaba, denenmemiş bir örnektir, ancak el APC kendiniz dosyanın varlığını saklamak için temel fikir, iletişim gerekir

function conditional_include($file) {
  $key = 'file-exists-' . $file;
  //fetch cache key; if it does not exist, then...
  if(($fileExists = apc_fetch($key)) === false) {
    //actually hit the disk to look for the file, and store the result
    apc_store($key, $fileExists = (file_exists($file) ? 1 : 0));
  }

  //only include the file if it exists.
  if($fileExists)
   include_once $file;
}

If you are using Zend Framework i would recommend using using the Zend_Loader autoloading magic to make sure the files you need are loaded. By using the autoloader you can strip out nearly all the include_once calls from ZF (except the ones in the Zend_Loader class) Caveat - does depend on your class and filenaming style, but you can rewrite/extend the autoloader to counter this.

Bu sonra ne olmayabilir ama ben yine de onun yardımcı umuyoruz ..