PHP Mimarlık: Bunu nasıl yaparsınız?

3 Cevap php

PHP iç işleyişini anlamak biraz yardıma ihtiyacım var.

Eski günlerde, biz TSR (bitince yerleşik kal) rutinleri (Pre-pencere dönemi) yazmak için kullanılan, hatırlıyor musun? Bu program çalıştırıldıktan sonra, bellekte kalacak ve bazı sıcak-tuşu (alt-ctrl veya tuş kombinasyonu) tarafından yeniden idam edilebilir.

Ben web sunucusu / uygulamalarda benzer kavramını kullanmak istiyorum. Demek, o apache / php sunucu üzerinde çalışan tüm web uygulamaları için (Generate_City_Combo (), veya Check_Permission () veya Generate_User_Permission_list () gibi veya istediğiniz) ortak işlevlerine oluşur hangi common_functions.php var.

In all the modules or applications php files, I can write:
require_once(common_functions.php) ;

tüm modüller ve uygulamalar bu ortak dosya dahil ve gayet iyi çalışıyor hangi.

My question is: How does php handle this internally?
Say I have: Two applications AppOne and AppTwo.
AppOne has two menu options AppOne_Menu_PQR and AppOne_Menu_XYZ
AppTwo has two menu options AppTwo_Menu_ABC and APPTwo_Menu_DEF

Bu dört tüm menü öğelerini {) Generate_City_Combo gibi (veya Check_Permission () veya Generate_User_Permission_list ()} arama işlevleri common_functions.php itibaren

Now consider following scenarios: A) User XXX logs in and clicks on AppOne_Menu_PQR from his personalized Dashboard then s/he follows through all the screens and instructions. This is a series of 8-10 page requests (screens) and it is interactive. After this is over, user XXX clicks on AppTwo_Menu_DEF from his personalized Dashboard and again like earlier s/he follows through all the screens and instructions (about 8-10 pages/screens). Then User XXX Logs off.

B) Kullanıcı XXX günlükleri ve yapar Aynı zamanda senaryo A'da belirtilen ne olursa olsun, kullanıcı YYY diğer bazı istemci makinesinden (günlükleri) ve senaryo A'da belirtilen benzer şeyler yapar

Senaryo A'da için, aynı oturum olduğunu. Senaryo B için, iki farklı oturum var.

Bütün menü seçenekleri Generate_User_Permission_list () ve Generate_Footer () arayın veya birçok menü seçenekleri Generate_City_Combo () diyoruz varsayalım.

Peki kaç kere sayfa istek başına common_functions.php include / yürütmek PHP olacak? seans başına? veya PHP başlangıç ​​/ kapatma başına? Benim anlayış, doğru common_functions.php kez HER sayfa isteği / devir / Yük / ekran idam edilecek mi? Temelde bir kez her etkileşim için.

Generate_City_Combo () veya Generate_Footer gibi fonksiyonları hatırla () aynı çıktıyı üretir veya bakılmaksızın ararken kim ya da aynı şeyi yapar.

Ben Uygulama başlatma ve kapatma kez başına bu kısıtlamak istiyorum.

Bunlar sadece örnekler. Benim asıl sorun çok daha karmaşık ve karmaşıktır. Benim uygulamaları, ben ideal bir ortam (tüm arama ve referans veri yapıları gibi, Read-Only-Data, Güvenlik-Matrix, Menü seçenekleri, bağlam duyarlı iş yürütme mantığı vb yaratacak sadece bir kez hangi Application_Startup () rutinleri aramak istiyorum .). Bundan sonra tüm istekleri sunucuya gelen bir ortam yaratmak için herhangi bir zaman veya kaynak harcamak gerekmez ama anında "önceden oluşturulmuş-çevre" başvurabilirsiniz.

Bu PHP uygulanabilir bir şey mi? Nasıl? Eğer yere veya PHP iç çalışma açıklayan bazı kitaplar bana gelin?

Şimdiden teşekkürler.

3 Cevap

PHP yürütme tamamen ayrı bir çerçeve içinde her HTTP isteği işler - hepsini hizmet için çalışan hiçbir kalıcı bir süreç var. (Webserverınız çalışıyor, ancak bir PHP sayfasını yükler her zaman, PHP yorumlayıcısı ayrı bir örneği çağrılır.)

İstediğiniz kalıcı alanlar oluşturulacak için geçen zamanı önemli ise, diskteki bu komut çıktısını önbelleğe alma ve mevcut (ve güncel) ise ilk önbelleğe alınmış sürümünü yüklerken düşünebilirsiniz.

Ben büyük olasılıkla erken optimize olduğunu söyleyebilirim, ama umut var.

Eğer istek başına istikrar istiyorum çünkü çok sık belleğinde derlenmiş kod birden çok kopyasını istiyorum; Eğer ayrı istekleri aynı bellek alanında faaliyet gösteren ve yarış koşulları veya veri bozulması riskini çalışan istemiyorum!

O dedi, PHP kodu ön derlemek olacak orada numerous PHP Accelerators, büyük ölçüde hızlandırılması çağrılarını içerir ve gerektirir vardır.

PHP (hemen hemen tüm durumlarda) odaklı sayfası. HTTP istekleri karşısında devleti koruyacak hiçbir Application_Startup () vardır.

Bazen bir veritabanı veya $ _SESSION itibaren tefrika veri boşaltma / yükleme bu taklit edebilir, ancak ilgili yük vardır. Ayrıca, bir memcached sunucusu hem de bu duruma diğer durumlar vardır, ama genellikle cPanel gibi tipik bir sanal barındırma hizmetleri ile bu kullanamazsınız.

Ben bahsediyorsun sen gibi bir uygulama oluşturmak için olsaydı ben oturumuna kullanıcıları seçimler seri ve daha sonra bir veritabanında oturumları arasında kalıcı gerekiyor ne olursa olsun tasarruf sağlayacaktır.

Bir veritabanına nesne serileştirme basitleştirmek Doctrine gibi PHP için çeşitli ORM modüller vardır.