Tasarruf değişkenler (değil seans)

8 Cevap

Bu saçma bir soru olabilir, ama nasıl belirli bir oturuma özgü olmayan değişkenler tasarruf yapmak. Biri tarafından Birisi bir web sayfası (not ziyaretler her zaman arttıran bir sayı - - Bunu yapmak isteyebilirsiniz neden bir basit örnek bir ziyaretçi sayacı olurdu aslında benim uygulama farklı, bunu yapmayacağım, ama bu bir işlevselliği I) ihtiyacım var. Bu yaptığını düşünebilirsiniz tek yolu ya bir dosyaya değişkenleri yazarken, ya da bir veritabanına değişkenleri sokmaktadırlar. Hem biraz inelegant görünüyor. Bu tür bir şey için daha iyi bir yolu var mı?

8 Cevap

Eğer küresel durumunu kaydetmek gerekirse, global devlet kaydetmek gerekir. Zaten belirtildiği gibi bu, tipik bir dosya veya bir veritabanı ya yapılır.

Bu hiç "çirkin" değil. Kalıcı (yarı-) Kaydetmek için bir şey gerekiyorsa, bir veritabanında koydu. Bu veritabanları için var.

http://uk3.php.net/serialize bir dosyaya bir dizi ya da yazmak mümkün olacak nerede PHP serialize () işlevi bir göz ve yeniden almak:

<?php
  // Save contents
  $var = array('pageCounter' => 1);
  file_put_contents('counter.txt', serialize($var));

  // Retrieve it
  $var = unserialize(file_get_contents('counter.txt'));
?>

Aksi bir veritabanına değerini kaydedin.

PHP vatansız ve (örneğin, farklı kullanıcı sayısı), bazı formu kullanmak gerekecek birden fazla pageloads fazla artacaktır değişkenleri tasarrufu için gidiyoruz eğer her pageload aslında, yeniden sayfanızı yeniden çalıştıran göz önüne alındığında sunucu uç depolama - dosya tabanlı veritabanı, ne olursa olsun - değişkeni kaydetmek için.

APC tüm PHP arasında veri paylaşımı için serin özelliklere sahiptir (Alternative PHP Cache) yüklemeyi deneyebilirsiniz, siz de paylaşımlı bellek kullanarak deneyebilirsiniz ya da dediğin gibi, bir dosya veya veritabanını kullanmak

Session_name ('ne olursa olsun') bir oturum için sabit bir isim için kullanılan olabilir, ben bu verilere başvurmak yanı sıra oturuma özel oturumu olabilir - Ben cevabı buldum.

Eğer kalıcı olmak istiyorsanız, veritabanı ve dosyaları gerçekten sadece iki seçenek vardır.

Sadece geçici bellekte bu değerleri saklamak istiyorsanız APC yüklüyse, bunu yapabilirsiniz:

// Fetch counter value back from memory
$success = false;
$counter = apc_fetch('counter', &$success);
if ($success) {
    // fetch succeeded
} else {
    // fetch failed
    $counter = 0;
}

// Increment the counter and store again
// Note that nothing stops another request/page from changing this value
// between the fetch and store calls.
$counter++;
apc_store('counter', $counter);

That was just an example. For a counter, you're better off using apc_inc('counter') / apc_dec('counter').

Muhtemelen diğer kodu önbelleklerini benzer yöntemleri var. Eğer bir opcode önbellek çalıştırıyorsanız değilseniz ... gerçekten? PHP bir sayfanın talep her zaman derle istiyor?

Zarif, herhangi bir veritabanı ve hiçbir dosya?

shmop ile sunucu bellekte saklamak ve sunucu yeniden değil umut!