PHP nesneleri dosyaya önbelleğe Yöntemleri?

8 Cevap php

ASPNET, ben Başvuru ve Cache mağaza sevgi büyüdü. Onlar harika birisin. Deneyimsiz kullanıcılar için, sadece onlara veri-mantık nesneleri atabilir, ve hey-presto, sadece veri biraz kez veritabanını sorgulamak gerekir.

Bugüne kadar en iyi ASPNET özelliklerinden biri, IMO.

Ben beri webdev için Linux, Windows hendeğe ve bu nedenle PHP, Python ve Ruby ettik. Ben çeşitli açık kaynak projeleri, tüm PHP kullanarak dev Çünkü en PHP kullanabilirsiniz.

Söylemeye gerek yok, ben önbelleğe alma veri nesneleri açısından neler sunabileceği PHP araştırdı ettik. Bugüne kadar birlikte oynadığım:

  1. Dosyaya Dizgeleştirme (oldukça yavaş / pahalı bir süreç)
  2. Olarak JSON / XML / şifresiz / etc (hatta yavaş okuma ops) dosyaya veri yazma
  3. Saf PHP dosyaya veri yazma (hızlı okuma, ama oldukça kıvrık yazma op)

Ben apps senaryoların her türlü yüklü gibi bir üçüncü taraf uygulaması (örn. memcached) dayanmaz bir çözüm arıyorum şimdi vurgulamak gerekir, hangi çoğu haklarına yüklemeniz gerekmez (örn: Ucuz) hosting hesabı.

Böylece geri Ben şimdi ne yapıyorum için, is persisting to file secure? Rule 1 üretim sunucu güvenliği her zaman devre dışı dosya yazma olmuştur, ama ben gerçekten PHP {[(2 herhangi bir şekilde görmüyorum o yazamadım eğer)]} önbellek. Güvenliğini artırmak için herhangi bir ipucu ve / veya hile vardır?

Is there another persist-to-file method that I'm forgetting?

Are there any better methods of caching in "limited" environments?

8 Cevap

Dizgeleştirme oldukça güvenli ve yaygın olarak kullanılır. Orada bir alternatif ise, ve bellek için önbelleğe etmektir. memcached kontrol ve APC, serbest ve yüksek performansı hem de konum. This article PHP farklı önbelleğe alma teknikleri üzerinde de ilgi çekici olabilir.

Re: Is there another persist-to-file method that I'm forgetting?

Bu sınırlı yarar var ama özellikle etli veritabanı sorgusu varsa geri Dizinlenmiş bir veritabanı tablosuna dışarı serileştirilmiş nesne yazabilirsiniz. Hala bir veritabanı sorgu yükü olurdu, ama etli sorguya aksine basit bir seçme olacaktır.

Re: Is persisting to file secure? and cheap shared hosting account)

Acı gerçeği ucuz paylaşılan hosting güvenli değildir olmasıdır. Eğer sunucuya erişim 100,500 veya 1000 diğer insanların ne kadar güveniyorsunuz? Tarihi ve (ironik) güvenlik nedenleriyle, ortamlar (PHP bir Apache modülü olarak çalışan) bir imtiyazsız kullanıcı olarak PHP / Apache çalışan var barındırma paylaştı. Burada rasyonel güvenlik Apache sürecini bakan dünya tehlikeye alırsa, sömürücülerin tek önemli sistem dosyaları ile berbat olamaz imtiyazsız bir hesaba erişimi vardır.

Kötü parçasıdır PHP kullanarak bir dosyaya yazmak zaman anlamına gelir, yani dosyanın sahibi aynı imtiyazsız Apache kullanıcı. Bu herkes okuma ve dosyalara yazma erişimi demektir sistemde, her kullanıcı için geçerlidir. Yukarıdaki senaryoda teorik korsanları da dosyalara erişimi olurdu.

Dosyaları yazmak için ayrıcalıksız apache kullanıcı etkinleştirmek için dizinlere ve dosyalara 777 bir dizin izinlerini veren, ve o halde dizini veya dosyayı bırakarak PHP kalıcı kötü bir uygulama da var. İşte anyone sistemde okuma / yazma erişim üzerinde verir.

Son olarak, bilinmezlik size kazandırır düşünebilir. "Orada benim gizli önbellek dosyaları nerede olduklarını bilmek hiçbir yolu yoktur", ama yanılıyorsunuz. Aynı gruptaki kullanıcıları setleri yukarı hosting ve çoğu varsayılan dosya maskeleri verecektir paylaşılan grup kullanıcıların oluşturduğunuz dosyaları okuma izni. Paylaşılan hosting hesabınıza SSH bazen, bir dizin yukarı gezinmek ve genellikle sistemdeki diğer kullanıcıların dosya üzerinden tarama başlayabilirsiniz. Bu yazılabilir dosyaları hissetmenize kullanılabilir.

Çözümler hoş değildir. Bazı barındıran bir CGI olarak PHP çalıştırmanıza olanak sağlayan bir CGI Wrapper sunacak. Burada yararı PHP yerine imtiyazsız kullanıcı sizinle çalışacak demektir yazısının sahibi, olarak çalıştırmak olacaktır. Sorun kaçırdı! Yeni Sorun! Geleneksel CGI Şubat ayında pekmez gibi yavaş.

Orada FastCGI, ama FastCGI titiz ve sürekli ayar gerektirir. Çok değil paylaşılan ana sunuyoruz. Eğer yok birini bulursanız, şans APC etkin olacak ve hatta memcached için bir mekanizma sağlamak mümkün olabilir.

Ne Ben her zaman yazabiliyor olmak zorunda yoksa ben PHP kodu bir yere yazmıyorum sağlamaktır. Genellikle benim dizin yapısı şöyle (bu projeler arasında değişiyordu, ama bu genel bir fikir):

project/
  app/
  html/
    index.php
    data/
  cache/

app (tercihen, ne index.php) web sunucusu tarafından yazılabilir değil. cache yazılabilir ve bu çözümlenir şablonlar ve nesneleri önbelleğe alma şeyler için kullanılır. data ihtiyaca bağlı olarak, muhtemelen yazılabilir. Bu kullanıcıların veri yüklerseniz, bu veri gider vardır.

Web sunucusu project/html işaret alır ve uygun olan herhangi bir yöntemi projede her sayfa için çalıştırmak için komut olarak index.php kurmak için kullanılır. Siz Apache mod_rewrite veya içerik müzakeresini (benim tercihi ama genellikle mümkün değil), ya da başka hangi yöntem gibi kullanabilirsiniz.

Tüm gerçek kodu web sunucusu tarafından doğrudan erişilebilir değil ki, app yaşıyor, ancak PHP yoluna ilave edilmelidir.

Bu çeşitli projeler benim için oldukça iyi çalıştı. Hatta örneğin, Wikimedia bu yapının değiştirilmiş bir sürümü ile çalışmak için, almak mümkün oldum.

PHP kodu üreten belli bir çekiciliği olmasına rağmen Oh ... ve ben, önbelleğe alma yapmak için serialize () / unserialize () kullanmak istiyorum. Ben çok hızlı post-ayrıştırmak yapma, yürütmek için PHP kodu üretmek biliyorum tüm çiftleşmiş motorları.

Ben benzer bir sorun vardı, ve böylece bir çözüm, PHP ile yazılmış bir önbellek yazdı. Sadece yuva desteklemek için PHP yapısını gerektirir. Diğer sonra o, o saf php çözümdür ve Paylaşılan barındırma sadece iyi çalışmalıdır.

http://code.google.com/p/php-object-cache/

Eğer Database Query Cache (yani MySQL) erişiminiz varsa size nesneleri seri ve DB saklayarak ile gidebiliriz. Veritabanı oldukça hızlı olmalıdır bellekte sorgu sonuçlarını tutan ilgilenir.

Sen neden-out-cache nesnelere çalışıyoruz büyü yok. Eğer, pahalı nesne örnekleme etrafında yavaş veritabanı sorgusu, çalışmalarını hızlandırmak karmaşık sayfa tekrarlanan oluşmasını önlemek, uygulama durumunu korumak ya da sadece zorlayıcı bir uzun kış durumunda nesneler uzakta depolamak için çalışıyorsunuz?

En düşük maliyetli iğrenç sınırlamaları verilen iyi çözüm, barındırma paylaşılan, başarmak için çalışıyoruz ne bağlıdır gidiyor. Varil paylaşılan barındırma alt Going size en iyi araçları ile çalışma olmayacağını kabul etmek anlamına gelir. Sayılar ölçmek zor, ama bir ticaret hosting ücreti, site performansı ve arasında var kapalı bulunuyor geliştirici süresi (yani - hızlı, kolay ve ucuz).

Bu oturumlarda nesneleri depolamak mümkün teoride var. Bu özürlü yazma sorununu dosyanın geçmiş seni alabilirsiniz. Ayrıca sorguyu hızlandırmak için bir mysql bellek destekli tabloda oturumu saklamak.

Bazı hosting yerlerde APC Lütfen derledik olabilir. Yani bellekteki nesneleri depolamak için izin verecek.