Çözüldü PHP'de her sayfada geçerli değişken oluşturmak

Bu konu çözüldü olarak işaretlenmiştir. Çözülmediğini düşünüyorsanız konuyu rapor edebilirsiniz.

Mucosoft

Megapat
Katılım
5 Mart 2014
Mesajlar
5.569
Makaleler
12
Çözümler
41
PHP'de sunucu üzerine kayıt edilecek her sayfada kullanılabilen bir değişken türü bulunuyor mu? SESSION veya COOKIE gibi değil, her kullanıcıda geçerli olacak değişken sistemi istiyorum. Yani belleğe kayıt edilecek fakat her kullanıcı için aynı değerler olacak.

Örneğin A sayfasında değişken oluşturdum. B sayfasında çağırabileceğim. Geçici değişken olacağı için depolama gereksinimi duymadım. Ayrıca gerektiğinde array yani dizi sisteminin de çalışması gerekiyor.
 
Çözüm
PHP'de dahili olarak istekler arası değişken değeri aktarabileceğimiz bir sistem yok. $_GLOBAL de sadece tek istekteki değişkenlerin erişim alanı ile ilgili. $_SESSION muadili kullanıcıya bağlı olmadan istekler arası veri taşımaya olanak sağlayan bir sistem maalesef yok. PHP'ye dahili olarak düşünebileceğimiz sistem APC. O da varsayılan olarak kapalı geliyor. Ayarlardan açmak, pecl üzerinden kurulum yapmak vs. gerekiyor.


Keşke PHP'de bu özellik dahili olarak olsa ve açık gelseydi. En azından $_SESSION gibi diske yazan bir dahili uygulama boyutunda değişken yani cache sistemi olsa güzel olurdu fakat bildiğim, araştırdığım kadarıyla yok. Diske yazıp okuyan kendi cache sisteminizi geliştirebilirsiniz, bunun hazırını araştırabilirsiniz, apcu kullanabilirsiniz, redis memcached tarzı harici bir cache sistemi kullanabilirsiniz. En sağlıklısı harici cache sistemi kullanmak çünkü kaynak kullanımı harici olarak takip edebilirsiniz ama en zoru ve bakım maliyeti en yüksek olan da tabi ki o. Yine de APC yerine daha mantıklı bence. Bunun yerine kendi geliştirdiğiniz bir disk cache sistemi de kullanabilirsiniz.

Cache sistemleri hakkında fikir vermesi açısından hazır frameworkler nasıl yapıyor diye bakabiliriz.


En popüler PHP frameworklerinden olan Laravel için 5 seçenek sunulmuş.
1. File cache - Değişkeni diske yazmaya uygun formata getirip (serileştirip) diske yazıp diğer isteklerde bu dosyayı okuyup php değişkenine çevirip (çözme) o istekler arası veri taşımayı sağlıyor.

2. PHP Array - File Cache'in gelişmişi gibi düşünebiliriz. Veriyi direkt php'nin kendi array formatında tutuyor. Böylece serileştirme, çözme aşamalarını ortadan kaldırıp daha performanslı bir file cache sistemi sağlıyor.

3. 4. 5. - Zaten harici sistemler. Özellikle Redis bu iş için çok uygun fakat ek bir araçla daha uğraşmanız gerekiyor.

PHP ile uğraştığım zamanlar bu konuya ben de çok takmıştım. Her istek için DB'ye gitmek ciddi performans kaybı gibi geliyordu. Şimdi çok takmıyorum açıkçası böyle bir ihtiyacım olsa direkt uygulamanın kendi veritabanını ya da file, array cache kullanırım. PHP ile geliştirilen bir sistemin en büyük avantajı bence harici bir vps'e vs. gerek kalmadan ucuz hostlarda da sorunsuzca barındırılabilmesi. Redis, Memcached vs. bunun için php için çok mantıklı değil diye düşünüyorum.

En azından büyük host firmaları APC desteklese çok iyi olurdu ama sanırım yok:
Bahsettiğiniz sistem bildiğim kadarıyla dahili olarak yok. Çünkü PHP'nin temel mantığı sayfa oluşturulduktan sonra kullanılan belleğin sisteme geri verilmesi üzerine. $_SESSION da diske yazıp okuyor diye biliyorum. Bellekte tutmak istiyorsanız Memcached ve Redis'e bakabilirsiniz.
 
PHP'de dahili olarak istekler arası değişken değeri aktarabileceğimiz bir sistem yok. $_GLOBAL de sadece tek istekteki değişkenlerin erişim alanı ile ilgili. $_SESSION muadili kullanıcıya bağlı olmadan istekler arası veri taşımaya olanak sağlayan bir sistem maalesef yok. PHP'ye dahili olarak düşünebileceğimiz sistem APC. O da varsayılan olarak kapalı geliyor. Ayarlardan açmak, pecl üzerinden kurulum yapmak vs. gerekiyor.


Keşke PHP'de bu özellik dahili olarak olsa ve açık gelseydi. En azından $_SESSION gibi diske yazan bir dahili uygulama boyutunda değişken yani cache sistemi olsa güzel olurdu fakat bildiğim, araştırdığım kadarıyla yok. Diske yazıp okuyan kendi cache sisteminizi geliştirebilirsiniz, bunun hazırını araştırabilirsiniz, apcu kullanabilirsiniz, redis memcached tarzı harici bir cache sistemi kullanabilirsiniz. En sağlıklısı harici cache sistemi kullanmak çünkü kaynak kullanımı harici olarak takip edebilirsiniz ama en zoru ve bakım maliyeti en yüksek olan da tabi ki o. Yine de APC yerine daha mantıklı bence. Bunun yerine kendi geliştirdiğiniz bir disk cache sistemi de kullanabilirsiniz.

Cache sistemleri hakkında fikir vermesi açısından hazır frameworkler nasıl yapıyor diye bakabiliriz.


En popüler PHP frameworklerinden olan Laravel için 5 seçenek sunulmuş.
1. File cache - Değişkeni diske yazmaya uygun formata getirip (serileştirip) diske yazıp diğer isteklerde bu dosyayı okuyup php değişkenine çevirip (çözme) o istekler arası veri taşımayı sağlıyor.

2. PHP Array - File Cache'in gelişmişi gibi düşünebiliriz. Veriyi direkt php'nin kendi array formatında tutuyor. Böylece serileştirme, çözme aşamalarını ortadan kaldırıp daha performanslı bir file cache sistemi sağlıyor.

3. 4. 5. - Zaten harici sistemler. Özellikle Redis bu iş için çok uygun fakat ek bir araçla daha uğraşmanız gerekiyor.

PHP ile uğraştığım zamanlar bu konuya ben de çok takmıştım. Her istek için DB'ye gitmek ciddi performans kaybı gibi geliyordu. Şimdi çok takmıyorum açıkçası böyle bir ihtiyacım olsa direkt uygulamanın kendi veritabanını ya da file, array cache kullanırım. PHP ile geliştirilen bir sistemin en büyük avantajı bence harici bir vps'e vs. gerek kalmadan ucuz hostlarda da sorunsuzca barındırılabilmesi. Redis, Memcached vs. bunun için php için çok mantıklı değil diye düşünüyorum.

En azından büyük host firmaları APC desteklese çok iyi olurdu ama sanırım yok:
 
Çözüm

Yeni konular

Geri
Yukarı