Ben bir uygulama geniş kalıcı tekiz (uygulama bir veritabanı kullanmak değildir) oluşturmak için dosya sistemini kullanın. Bazen bir sayfa yüklemek için 1-2 dakika sürer ve ben tekil bir örneğini alır işlevi sürünün kullanımı sorunu daralmış. İşte kod basitleştirilmiş versiyonu: (edit: Benim orijinal yazılan kod en önemli kısmını sol)
public static final function getInstance() {
if (is_null(self::$instance) {
$fh = fopen($filename, 'ab+');
if (flock($fh, LOCK_EX)) {
$N = filesize($filename);
if ($N > 0) {
rewind($fh);
$s = stream_get_contents($fh);
$obj = unserialize($s);
} else {
$obj = new MyClass();
}
self::$instance = $obj;
return $obj;
} else {
fclose($fh);
trigger_error("could not create lock", E_USER_WARNING);
}
} else {
return self::$instance;
}
}
The code is currently being run my development machine which uses XP and NTFS.
The lock is always created (i.e. trigger_error is not called).
The delay is random but seems to happen more often when refresh is hit.
Getting rid of flock completely eliminates the problem but it also makes the code unsafe.
Herhangi bir tavsiye?
Herkes bir uygulama geniş bir kalıcı tekiz oluşturarak daha iyi bir yol biliyor mu?