Html statik ve dinamik sayfaları ayrıntılı olarak. Dikkat. İşe hazırlık

Birinden yardım istemeden kendi ellerinizle bir web sitesi oluşturup bakımını yapabilmek harika değil mi? Paradan tasarruf etmenin yanı sıra (sonuçta, web geliştirme hizmetleri çok maliyetlidir), bu, birçok sorunu bağımsız olarak çözmenize olanak tanır: kişisel bir web sayfası, kurumsal bir web sitesi, bir çevrimiçi mağaza oluşturmak, ilginç projeler uygulamak - bu bir bir kişinin neler yapabileceğinin tam listesi. web geliştirme teknolojilerine sahip olmak.

Bu kitabı okuduktan sonra modern bir web sitesinin ne olduğunu, konseptinin nasıl geliştirildiğini, barındırma ve alan adının ne olduğunu, statik bir web sayfasının dinamik bir web sayfasından nasıl farklı olduğunu, web sitesi içeriğinin nasıl oluştuğunu, neden olması gerektiğini öğreneceksiniz. optimize edilmiş ve çok arkadaş. HTML köprü metni biçimlendirme dilini kullanarak web sayfalarını bağımsız olarak nasıl programlayacağınızı öğrenecek ve ayrıca web geliştiricileri için özel olarak oluşturulmuş ve minimum zaman ve çaba harcayarak otomatik olarak tam teşekküllü bir web sitesi oluşturmanıza olanak tanıyan yazılım ürünleri hakkında ayrıntılı bilgi edineceksiniz. .

Kolay, erişilebilir bir sunum tarzının yanı sıra çok sayıda açıklayıcı illüstrasyon ve pratik örnek, bu kitabın çalışmasını heyecan verici bir sürece dönüştürür, bunun sonucu olarak çekici bir modern web kaynağı hızlı bir şekilde oluşturma ve tüm işlemleri gerçekleştirme yeteneği olacaktır. korumak, sürdürmek ve optimize etmek için gerekli adımlar.

Kitap:

Statik ve dinamik web sayfası kavramı

Daha önce, statik ve dinamik web sayfalarını neyin oluşturduğundan kısaca bahsettik. Bu bölümde, bu konuyu daha ayrıntılı olarak ele alacağız.

Statik bir sayfanın adı kendisi için konuşur: böyle bir sayfada statik, sabit ve değişmeyen bilgiler sunulur. Bunun yerine değiştirebilirsiniz, ancak bunun için sayfanın program kodunda uygun ayarlamaları yapmanız gerekir.

Tipik olarak, statik bir sayfa dosyası HTML biçimindedir. Bir web geliştiricisi, sitenin içeriğini oluşturmak için HTML kodu yazar, dosyaya bir ad atar ve ardından sayfayı web sunucusuna yükler ve İnternet kullanıcılarının kullanımına sunar. Örneğin, kurumsal bir sitede, statik bir sayfa şirketin tarihi, faaliyetlerinin ana yönleri vb. hakkında bilgiler içerebilir. Web geliştirme alanındaki ilk deneyimlerinize statik web oluşturma ile başlamanız gerektiğini unutmayın. sayfalar. HTML ile Web Programlama Temelleri bölümünde bunun hakkında daha fazla konuşacağız.

NOT

HTML dilinde yazılmış bir sayfanın adresi, bir noktadan sonra gelen karakterlerle bitecektir.

Dinamik bir web sayfası ile statik bir web sayfası arasındaki temel fark, içeriğinin kalıcı olmayıp değişebilmesidir. Kullanıcının isteklerine bağlı olarak daha doğrusu ziyaretçiler tarafından oluşturulan ve web sunucusuna gönderilen istekler bazında oluşturulmaktadır. Daha önce belirttiğimiz gibi, dinamik web sayfasının en tipik örneği, bir kullanıcı tarafından gönderilen bir arama sorgusuna dayalı olarak bir arama motoru (örn. www.google.ru) tarafından döndürülen arama sonuçlarının bulunduğu bir sayfadır. Web sayfalarını kullanmanın bir başka tipik örneği çevrimiçi mağazalardır: bir ziyaretçi, seçenekleri kullanarak, hangi ürünle ve hangi özelliklerle ilgilendiğini belirtir, bir istek gönderir (bu genellikle ilgili düğme - vb. ile yapılır) ve sonra birkaç saniye ekranda belirtilen kriterleri karşılayan ürünlerin bir listesini alır. Ayrıca dinamik sayfalar, diğer sitelerde çok çeşitli amaçlar ve yönler için yaygın olarak kullanılmaktadır.

Dinamik sayfalar HTML dili kullanılarak da oluşturulabilir, ancak başka bir dil olan PHP bunun için daha uygundur (öncelikle daha geniş işlevselliği nedeniyle). Buna göre, sayfa dosya formatı artık HTML değil PHP olacak ve İnternet adresi bir noktadan sonra gelen karakterlerle bitecek.

Bulut depolamamıza dayalı olarak statik siteler hakkında yayın döngüsüne devam ediyoruz (önceki yayınlara bakın ve). Bugün, ince ayar ve optimizasyon konularını ayrıntılı olarak tartışacağız.

Kullanıcı açısından sitenin mükemmel çalışması için ana kriter elbette bileşenlerin indirme hızıdır. Sitenin herhangi bir nedenle yüklenmesi çok uzun sürerse, bu kaçınılmaz olarak beklemekten yorulan ziyaretçilerin kaybına yol açar. Bir web sitesini hızlı ve kullanışlı hale getirmek için, onu optimize etmek için biraz çalışmanız gerekir.

Akamai'den bulut CDN depolama alanımıza bağlanma hakkında zaten yazdık. CDN, tüm statik içeriği (resimler, metin dosyaları, JS, CSS vb.) dünyanın dört bir yanına dağılmış önbelleğe alma sunucularında depolar (haritaya bakın).

Bir web sayfasına veya kaynaklarına erişirken, istek, coğrafi olarak istemciye en yakın önbelleğe alma sunucusu tarafından işlenecektir. CDN kullanmak, hem sabit hem de mobil cihazlar için web sitesi yükleme hızını artırmaya yardımcı olur.

Varsayılan olarak, tüm veriler 24 saat boyunca CDN'de önbelleğe alınır. Son zamanlarda, depoya CDN önbelleğini istediğiniz zaman temizleyebileceğiniz yeni bir özellik eklendi:

Bunu yapmak için, şekilde gösterilen sekmeye gidin ve forma önbelleğini temizlemek istediğiniz sayfaların adreslerini girin. Önbellek anında değil, form gönderildikten yaklaşık 15 dakika sonra temizlenir.

Herhangi bir web sayfası birçok farklı öğe içerir: resimler, komut dosyaları, stil dosyaları vb. Sayfayı ilk kez ziyaret eden kullanıcı, bir dizi HTTP isteği yaparak tüm bu öğeleri alır. Çok sayıda dosyayı yeniden yüklemekten kaçınmak için önbelleğe alma kullanılır.

HTTP protokolünde kullanılan önbelleğe alma modeli, önbelleğe alınan belgenin hala güncel olduğundan emin olmak için istemci tarafından kullanılan özel başlıklar olan doğrulayıcılara dayanır. Doğrulayıcılar sayesinde istemci, önbelleğe alınmış kopyanın tamamını sunucuya göndermeden belgenin durumunu kontrol edebilir. Buna karşılık, sunucu, yalnızca aldığı doğrulayıcı istemcinin önbelleğinde eski bir kopyanın varlığını belirtirse yanıtında bir belge gönderir.

Doğrulayıcılar, güçlü ve zayıf yönler olarak sınıflandırılır. HTTP / 1.1'de güçlü doğrulayıcılar tanıtıldı. Dosya değiştiğinde değiştikleri için böyle adlandırılmışlardır. Bunlar, sözde ETag'leri (varlık etiketleri) içerir. ETag, bir belgenin içeriği için bir tanımlayıcıdır; belgedeki en az bir bit değişirse değişir. Tanımlayıcı, örneğin belge içeriğinin MD5 toplamı gibi kullanılabilir. Bir istemci sunucudan bir belge istediğinde, yanıtta ETag değeri iletilir, örneğin:

HTTP / 1.1 200 Tamam Sunucu: Selectel_Storage / 1.0 Kabul Aralıkları: bytes Son Değiştirilme Tarihi: Mon, 18 Ağustos 2014 12:25:38 GMT X-Zaman Damgası: 1408364738.80296 İçerik Türü: image / jpeg İçerik-Uzunluk: 458073 Erişim-Kontrol -Allow-Origin: * Access-Control-Expose-Headers: Last-Modified, ETag, X-Timestamp ETag: "ebef3343a7b152ea7302eef75bea46c3" Tarih: 20 Ağustos 2014 Çarşamba 11:52:48 GMT
Aynı belge yeniden istendiğinde, kaydedilen doğrulayıcı değeri If-None-Match başlığına iletilir:

GET / HTTP / 1.1 Ana Bilgisayar: example.org If-None-Match: "ebef3343a7b152ea7302eef75bea46c3"
Belge değiştirilmediyse, sunucu yanıtta yalnızca üstbilgileri ve 304 Değiştirilmedi kodunu döndürür. Aksi takdirde, sunucu 200 kodunu döndürür ve belgenin yeni sürümünü ve bunun için yeni ETag değerini aktarır.

Depomuzda ve ETag, dosya yüklendikten hemen sonra oluşturulur. İçeriğin bir MD5 karmasıdır. İçerik değişirse, ETag de değişir.

Zayıf doğrulayıcılar, bir dosya her değiştirildiğinde mutlaka değişmesi gerekmeyen doğrulayıcılardır.

Zayıf doğrulayıcıya bir örnek, Last-Modified başlığıdır. Bu başlığın değeri, dosyanın en son değiştirildiği tarihtir. Depomuza otomatik olarak yüklenir. If-Modified-Since başlığındaki istekte, Last-Modified başlığında mevcut olandan daha önce olmayan bir tarih belirtirseniz, yanıt da 304 Değiştirilmedi olacaktır.

Güçlü doğrulayıcılar herhangi bir bağlamda kullanılabilir. Zayıf doğrulayıcılar, dosyanın tam içeriğine bağlı olmayan bir bağlamda kullanılır.

Örneğin, her iki doğrulayıcı türü de koşullu GET isteklerinde kullanılabilir (Değiştirilmişse veya Eşleşmezse). Ancak, dosyaları parçalar halinde yüklerken yalnızca güçlü doğrulayıcılar kullanılabilir - aksi takdirde müşteri dosyayı tutarsız bir biçimde alır.

Max-age yönergesine sahip Cache-Control başlığı, orijinali depoda olan bir dosyanın bir kopyası için tarayıcı önbelleğindeki yaşı ayarlamak için kullanılır. Bu başlık sayesinde site yükleme hızını önemli ölçüde artırabilirsiniz - dosya önbelleğe alınırsa, tarayıcı siteye tek bir istekte bulunmadan içeriği anında önbellekten görüntüler.
Dosyanın önbellekte saklanma süresi saniye cinsinden belirtilir:

Önbellek Kontrolü: maksimum yaş = 7200
Gösterilen örnekte 7200 saniyedir (2 saat). Tipik olarak CSS, JS ve görüntü dosyaları bu şekilde önbelleğe alınır. Bunları sonsuza kadar önbelleğe almak ve içerik değiştiğinde HTML'deki bağlantılarını değiştirmek istenir. RFC 2616, 1 yılı aşmayan bu tür dosyalar için önbelleğe alma süresini önerir:

Önbellek Kontrolü: maksimum yaş = 31536000
Belirli bir dosyanın önbelleğe alınmamasını, ancak her zaman "taze" sunulmasını istiyorsanız, Cache-Control başlığı aşağıdaki değere ayarlanır:

Önbellek Kontrolü: önbellek yok
Öğenin hiç önbelleğe alınmaması gerektiğini ve istemcinin depoya her erişildiğinde bunu istemesi gerektiğini belirtir (bu durumda dosya gövdesinin indirilmesi gerekeceğinden dosya indirme süresi artacaktır).

Dosyayı her zaman güncel tutmanın başka bir yolu da dosya adına bir içerik sağlama toplamı eklemektir.

Dosyanın içeriği en az bir bit değişirse, sağlama toplamı da değişecektir. Herhangi bir değişiklik olmadıysa, tarayıcı dosyayı önbellekten kullanır. Dosyayı değiştirdiğinizde, bağlantısı değişir ve yeni sürüm yüklenir.

Sağlama toplamını hem standart md5sum veya sha1sum yardımcı programlarını kullanarak hem de özel yardımcı programları kullanarak alabilirsiniz.

Ayrıca, dosyalara bağlantılara rastgele bir dizi karakter ekleyebilir - örneğin, bir zaman damgası (http://example.com/script.js?timestamp_here) - ve site her dağıtıldığında bağlantıları güncelleyebilirsiniz. Bununla birlikte, bu yöntemi kullanırken, tarayıcının gereksiz isteklerde bulunmayacağına dair bir garanti yoktur: içeriği değişmemiş dosyalara bile, başka bir bağlantı yönlendirilecektir (önbelleğe alma anahtarı, sorgu parametreleriyle birlikte tüm bağlantıdır) ve siz onları tekrar indirmek zorunda kalacak.

HTML sayfaları için, Cache-Control başlığının no-cache olarak ayarlanması tercih edilir. Sayfada acilen bir şeyin değiştirilmesi gerekiyorsa ve müşteri bu sayfayı zaten önbelleğe aldıysa (modern tarayıcılar bunu varsayılan olarak yapar), o zaman müşteri değişiklikleri hiç görmeyebilir.

Bu, özellikle CDN'leri kullanırken önemlidir: Akamai'nin CDN'si, varsayılan olarak 24 saat boyunca karşılık gelen başlıklar olmadan dosyaları önbelleğe alacaktır. Elbette önbelleği temizleyebilirsiniz (yukarıya bakın), ancak yine de ilgili isteği gönderdikten sonra en az 15 dakika beklemeniz gerekir. Önbelleksiz değerinin ayarlanması olası sorunların önlenmesine yardımcı olacaktır - sayfa her zaman güncel olarak yüklenecektir. Bu durumda tarayıcılar If-None-Match (veya If-Modified-Since) başlıklarını kullanmaya devam edecek ve değiştirilmemiş bir sayfa tekrar yüklenmeyecektir.

Bazı durumlarda, değişiklik sıklığına göre HTML sayfaları için önbelleğe alma süresini belirtmek daha iyidir. Örneğin sitedeki haberlerin olduğu sayfa her saat başı güncelleniyorsa maksimum yaş 3600 (1 saat) olarak ayarlanabilir.

Mağazamızdaki Cache-Control başlığının (ve diğer HTTP başlıklarının) değeri web arayüzü üzerinden ayarlanabilir:

Web arayüzü aracılığıyla, başlık değerleri yalnızca bir bütün olarak kapsayıcı için ayarlanır. Tek tek dosyalar için başlık değerleri yalnızca API aracılığıyla veya üçüncü taraf istemciler kullanılarak ayarlanabilir.

Expires başlığı Cache-Control yerine kullanılabilir. Değeri, RFC 1123 tarih biçimindeki tarihi gösterir ve bundan sonra dosya artık geçerli değildir (örneğin: Sal, 31 Ocak 2012 15:02:53 GMT). Bu tarihe kadar tarayıcı siteye istekte bulunmayacak, ancak dosyayı önbellekten alacaktır. Bu tarihten sonra dosya tekrar indirilecektir.

Sıkıştırma yardımı ile sitenin yüklenmesini önemli ölçüde hızlandırabilirsiniz. HTTP / 1.1'den beri, istemciler Kabul-Kodlama başlığında desteklenen sıkıştırma yöntemlerini bildirir:

Kabul-Kodlama: gzip, deflate
Sunucu yanıtında, kullanılan sıkıştırma yöntemiyle ilgili bilgiler İçerik Kodlama başlığında iletilir:

İçerik Kodlaması: gzip
Günümüzde en popüler ve en sık kullanılan yöntemlerden biri elbette gzip'tir. Yardımı ile indirme süresini önemli ölçüde azaltabilirsiniz. Gzip, özellikle metin dosyalarıyla iyi çalışır: HTML, CSS, JS. Sıkıştırma sayesinde, metin dosyalarının boyutu (ve buna bağlı olarak iletilen trafiğin hacmi) ortalama 5-10 kat azalır. Bu, özellikle yavaş bağlantılara sahip mobil istemciler için önemli olan sayfa yükleme hızını önemli ölçüde artırabilir.

Grafik dosyaları için gzip kullanmanın bir anlamı yoktur: sıkıştırma, boyutlarını önemli ölçüde azaltmaya yardımcı olmaz ve hatta çoğu zaman onu artırır.

Akamai CDN, varsayılan olarak çoğu metin dosyası için gzip kullanır.

Küçültme, bir dosyanın boyutunu küçültmek ve indirme süresini azaltmak için gereksiz / isteğe bağlı karakterlerin kaldırılması anlamına gelir. Bu nedenle, dosya boyutu ortalama 1,5-3 kat azalır. Günümüzde sadece JS ve CSS'yi değil, diğer dosya türlerini de (HTML, grafik dosyaları vb.) küçültme uygulaması yaygınlaşmaktadır.

Küçültme için özel araçlar kullanılır, özellikle:

Küçültme yardımıyla, yalnızca önemsiz boşlukları ve satır sonlarını (CSS ve JS'de isteğe bağlıdır) kaldırmakla kalmaz, aynı zamanda daha karmaşık işlemleri de gerçekleştirebilirsiniz. Örneğin, JS'de şöyle bir işlev:

İşlev toplamı (birinci_param, ikinci_param) (dönüş (birinci_param + ikinci_param);)
Bunu s (a, b) (dönüş (a + b)) işlevine dönüştürebilir ve ardından çalışma mantığını tamamen koruyarak kodun her yerinde sum yerine s kullanabilirsiniz. JavaScript küçültme prosedürünün nasıl çalıştığını http://lisperator.net/uglifyjs/ adresinde Açık Demo bölümünde görebilirsiniz.

Modern tarayıcılar, alan başına ortalama 6 eşzamanlı istekte bulunur. Siteniz çok sayıda küçük dosya içeriyorsa, yüklenmesi uzun sürebilir - bu özellikle yavaş veya kararsız bağlantılarda fark edilir.

İşte burada birleştirme yardımcı olabilir - aynı türden (JS veya CSS gibi) birden çok dosyayı bir dosyada birleştirmek. İstek sayısını azaltmanıza ve böylece sayfa yükleme hızını artırmanıza olanak tanır.

Birleştirme, görüntü yüklemeyi hızlandırmak için de kullanılabilir. İki şekilde yapılabilir: URL'lere veri gömerek ve sprite kullanarak.

Veri enjeksiyonu, özel bir URL türü kullanılarak gerçekleştirilir - veri: URI. URI (Evrensel Kaynak Tanımlayıcı), hem img etiketinin src özelliğinde hem de CSS'deki arka plan görüntüsünün URL'sinde kullanılabilir.

Görüntüleri verilere dönüştürmek için çevrimiçi araçlar vardır: URI'ler (bkz., örneğin ve).

Sprite, tek bir resimde birleştirilmiş bir resim koleksiyonudur. Siteleri oluşturmak için çeşitli yazılım araçları kullanılır. CSS kullanarak, büyük bir resmin gerekli bölümüne başvurabilir ve sitede doğru yere yerleştirebilirsiniz.

Sprite'lar yükleme hızını artırmaya yardımcı olabilir, ancak bunlarla çalışmanın genellikle zor olduğu unutulmamalıdır. Hareketli grafikte küçük bir değişiklik yapmak için, CSS'de eşlik eden değişiklikleri yapmanız gerekecektir.

JS projeleri oluşturmak için modern araçlarda (

Web sitenizin içeriğini ilginç içeriklerle güncellemek için her gün çalışırken, muhtemelen her gün yüzlerce yeni Web sitesinin oluşturulduğunu ve her gün yüzlerce yeni belgenin eklendiğini düşünüyorsunuz. Tüm bu yeni sayfa dizileri nasıl oluşturuluyor ve nasıl bu kadar hızlı güncelleniyor? Tüm bunlar, dinamik web sayfaları kavramını kullandığı için ilk bakışta göründüğü kadar karmaşık değildir.

Bu yazıda, bir basın bülteni Web sitesi yayınlama mekanizması oluşturma adımlarında size yol göstereceğiz. Sitemiz, şablonlu Web sayfalarıyla bir veritabanında depolanan anında basın bültenlerine bağlanacaktır. Bu konuda yazılmış birçok kitap ve makale olduğundan, okuyuculara Web sitesi geliştirme araçlarının temellerini tanıtmak niyetinde değiliz. Bu makale esas olarak Web sayfaları ve basit siteler oluşturma konusunda deneyimli kullanıcılara yöneliktir. Ana hedefimiz, ilk dinamik Web sitenizi geliştirmeye nasıl başlayacağınızı göstermektir. Makaleyi anlamak için bilgi sistemleri mimarileri, hiper metin biçimlendirme dili (HTML) ve Perl programlama dili hakkında temel bilgilere sahip olmak arzu edilir. Bu siteyi oluşturmak için üç güçlü açık kaynak teknolojisi kullanacağız: Apache, MySQL ve Perl / DBI.

Statik Web Sitesi Nedir?

Dinamik Web sitesi geliştirmeye dalmadan önce, statik bir Web sitesinin ve onu oluşturan statik Web sayfalarının ne olduğunu anlamak önemlidir. Statik Web sayfaları manuel olarak oluşturulur, ardından kaydedilir ve siteye yüklenir. Böyle bir sayfanın içeriğinin değiştirilmesi gerektiğinde, kullanıcı genellikle bir HTML düzenleyici kullanarak iş bilgisayarında bunu değiştirir, kaydeder ve ardından Web sitesine yeniden yükler. CNN.com veya BBC.co.uk gibi bir portala yakından bakarsanız, bu şirketlerin sitelerinin içeriğini güncellemek için bir düzen tasarımcıları ordusu tuttuğunu düşünebilirsiniz. Aslında, daha iyi bir yol var - dinamik bir web sitesi konseptini kullanmak.

Dinamik web sitesi nedir?

Dinamik Web sitelerinin görüntülenen her sayfası, genellikle bir veritabanında depolanan, sürekli değişen içeriğin eklendiği bir şablon sayfaya dayanır. Bir kullanıcı bir sayfa istediğinde, ilgili bilgiler veritabanından alınır, yeni bir Web sayfası oluşturmak için şablona eklenir ve Web sunucusu tarafından kullanıcının tarayıcısına gönderilir ve bu da onu beklendiği gibi işler. İçeriğe ek olarak, Web sitesi navigasyonu da dinamik olarak oluşturulabilir. Bu nedenle, sitenizin içeriğini güncellemeniz gerekiyorsa, yeni sayfa için metin eklemeniz yeterlidir; bu metin daha sonra belirli bir mekanizma kullanılarak veritabanına eklenir. Sonuç olarak, Web sitesi kendini güncelliyor gibi görünüyor.

Dinamik bir web sitesi oluşturmak

Dinamik bir site oluşturmak için ihtiyacınız olan ilk şey Apache gibi bir Web sunucusudur.

Web sunucusu bir e-ticaret sitesine, bir haber sunucusuna, bir arama motoruna, bir uzaktan eğitim sistemine ve hatta tüm bu alanlara hizmet vermek için kullanılabilir. Bir Web sunucusunun seçimi, bireyin veya kuruluşun İnternette yapmayı amaçladığı faaliyetin türüne bağlıdır.

İş hayatında verdiğiniz stratejik kararlardan birkaçı, Web sunucunuz için bir platform seçmek kadar önemlidir. Sunucu performansı, bir sitenin güvenilirliğini, müşteri isteklerine ne kadar duyarlı olduğunu ve siteyi çalışır durumda tutmak için ne kadar çaba gösterilmesi gerektiğini belirlemede son derece önemli bir faktördür. Doğru bileşenler ve kaliteli tasarım ile bir Web sitesi, müşterilere ve ortaklara şirketinizle etkileşim kurmanın yeni ve daha uygun bir yolunu sağlayabilir. Web sunucusunun aşırı yüklenmesi, veritabanı sunucusunun veya başka bir kaynağın istemciler tarafından kullanılamamasına neden olabilir.

Büyük şirketler yakın zamana kadar Microsoft Internet Information Server, Netscape FastTrack, IBM WebSphere'e güveniyordu ve Apache çoğunlukla küçük şirketler tarafından kullanılıyordu. Ancak şimdi durum biraz değişti ve Apache, başta Yahoo olmak üzere bazı büyük İnternet projelerinin performansını desteklemeye başladı.

Makalenin tam sürümünü CD-ROM'umuzda bulabilirsiniz.

Apache, Web sunucunuzu bireylerin ve işletmelerin ihtiyaçlarını karşılayacak şekilde özelleştirmek için zengin seçenekler sunar. Ayar, yapılandırma dosyalarında bulunan yönergeler kullanılarak yapılır. Apache, sanal Web siteleri oluşturmanıza olanak tanır ve ayrıca bir proxy sunucusu görevi görür. Sunucunun içeriğine yalnızca sınırlı sayıda kişinin erişimini sağlamak istiyorsanız, Web sunucusu, belirtilen dizinlere erişirken, sunucunun oturum açma adlarını ve şifrelerini kendi veya veritabanlarından birinde kontrol edecek şekilde yapılandırılabilir. ona bağlı.

Ardından, web sayfasında görüntülenen içeriği (içeriği) nasıl depolayacağınıza karar vermeniz gerekir. Bu makalede, belirli bir örnek kullanarak, MySQL DBMS'de Web içeriğini alanlar ve veriler içeren kayıtlar içeren tablolara ayırmamıza izin verecek bir veritabanının nasıl oluşturulacağını göstereceğiz. Alan, bir tablodaki ayrı bir veri birimidir. Örneğin col_title, col_date, col_fullstory, col_author alanları ile bir tbl_news_items tablosu oluşturabiliriz. MySQL, kullanım ve yönetim kolaylığı, Linux ve Windows dahil olmak üzere farklı platformlar için ücretsiz dağıtımı ve hızla artan popülaritesi nedeniyle böyle bir veritabanı oluşturmak için mükemmel bir seçimdir.

Ardından dinamik HTML şablon sayfaları oluşturacağız. Veritabanı ve şablonlarla etkileşim için uygulamalar geliştirmek için Perl dilini kullanacağız.

Aslında, üç Perl programı veya komut dosyası oluşturmamız gerekiyor: biri mevcut tüm basın bültenlerine (pr-list-dbi.pl) bağlantılar gösterecek, diğeri - seçilen basın bülteninin içeriği (pr-content-dbi. pl) ve üçüncüsü veritabanına yeni bir basın bülteni eklememize izin verecek (pr-add-dbi.pl). Düzen çalışması, örneğin Allaire HomeSite (http://www.allaire.com/) gibi favori HTML düzenleyicinize atanabilir. Bir şablon oluştururken, dinamik dolgunun ekleneceği (elbette değişken uzunlukta) boş alanlar bırakmanız gerektiğini unutmayın.

Basın bültenleriniz için genel bir tasarım geliştirdikten sonra, yukarıdaki boş alanlara belirli anahtar kelimeleri eklemeniz yeterlidir (bununla ilgili daha fazla bilgi için aşağıya bakın). Kullanıcı bir basın açıklaması talep eder etmez, Web sunucusu Perl kodunu ayrıştırır ve şablonlardaki anahtar sözcükleri veritabanından alınan içerikle, yani belirli bir basın açıklamasıyla değiştirir.

Yapılacak son şey, şablonlarınızı belirli dizinlerdeki web sunucusuna yüklemek. CuteFTP FTP istemcisini (http://www.cuteftp.com/) kullanabilirsiniz, ancak biz FAR dosya sarmalayıcısını kullanmayı tercih ediyoruz. Hatırlanması gereken iki önemli nokta: birincisi, şablon dosyaları .pl ile biten adlar içermelidir ve ikincisi, yürütülebilir olmalıdırlar (UNIX sistemlerinde, chmod 0755 şablon_adı.pl). Hepsi bu!

İşlevsellik ekleme

Basın bülteni yayınlama mekanizmasına işlevsellik eklemek zor değildir. Veritabanında bulunan basın bültenlerinin bağlantılarını tarihe veya başlığa göre sıralayabilir, yıllara göre gruplayabilirsiniz. Veya örneğin, Web sayfanızda zaman zaman, gerçekte ne zaman yayınlandığına bakılmaksızın ziyaretçilere bilgi sağlayan bir basın bülteni görüntülemek isteyebilirsiniz. Ancak büyük olasılıkla en önemli ve kullanışlı işlev, basın bülteninin içeriğini girmek için bir HTML formu eklemek ve bu formu işlemek ve ardından belgeyi veritabanına göndermek için Perl'de bir CGI programı geliştirmek olacaktır. CGI'nin (Ortak Ağ Geçidi Arayüzü), bir Web sunucusu ile tek bir program arasındaki bir protokol, mekanizma veya resmi anlaşma olduğunu hatırlayın. Sunucu, HTML formları gibi girdi verilerini kodlar ve CGI programı bunları çözer ve bir çıktı akışı oluşturur. Protokol belirtimi, belirli bir programlama dili hakkında hiçbir şey söylemez. Bu nedenle, bu protokole uyan programlar hemen hemen her dilde yazılabilir - C, C ++, Visual Basic, Delphi, Tcl, Python veya bizim durumumuzda olduğu gibi Perl'de.

Sonuçlardan bazılarını özetleyelim. Umarım bu makale, dinamik web sayfaları kavramının statik olanlara göre avantajlarını anlamanıza yardımcı olur. Bu konsepti uygulamak, manuel çalışmayı azaltacak, sunucu iş yükünün dağıtılmasına yardımcı olacak ve sitenize hızla içerik ekleyecektir. Apache, MySQL ve Perl'in birleşimi, neredeyse ücretsiz, kullanımı kolay, platformlar arası ve ölçeklenebilir geliştirme ortamını kurmak ve yapılandırmak için esnek bir ortam sağlayacaktır. Burada kurulumlarının özelliklerini dikkate almayacağız, çünkü ilk olarak, bu makale için yeterli alan kalmayacak ve ikincisi, bu araçların her biri çok ayrıntılı belgelerle birlikte geliyor.

MySQL DBMS'de bir veritabanı oluşturma

Veritabanı Modeli Geliştirme

Veritabanı oluşturmanın ilk ve en önemli adımı, modelini geliştirmektir. O halde başlayalım.

Aşama 1

Veritabanına bir şekilde isim vermemiz gerekiyor. Buna db_website diyelim.

Adım 2

Veritabanı tablolarının tam olarak neleri içereceğini belirlemek gerekir. Veritabanı yüzlerce tablo içerebilir. İlk başta, basın bültenlerimizi saklamak için yalnızca bir tabloya ihtiyacımız var. Buna tbl_news_items diyelim.

Aşama 3

Tablomuzun içereceği alanları tanımlamamız gerekiyor. Bu alanlar, basın bülteninin tüm unsurlarını temsil edecektir. Örneğimiz beş alan kullanır: col_id (basın bülteninin sayısal kimliği), col_title (başlık), col_date (yayın tarihi), col_fullstory (içerik), col_author (yazar adı). col_id alanı, kullanıcının belirli bir basın bülteninin içeriğini sorgulayabileceği benzersiz bir tanımlayıcı içerecektir.

Veritabanı oluşturma

Şimdi MySQL DBMS ile bağlantı kurmamız ve veritabanımızı oluşturmamız gerekiyor. Aşağıda bunu komut satırından nasıl yapacağınızı göstereceğiz. Ancak, kullanımı kolay bir grafik arabirim kullanarak yönetmenize izin veren birçok yönetim sistemi veya DBMS yöneticisi vardır.

Her şeyden önce, Yapılandırılmış Sorgu Dilinin (SQL) temellerini kesinlikle bilmelisiniz. MySQL DBMS, desteklenen SQL spesifikasyonunun eksiksiz bir açıklamasıyla birlikte gönderilir. Bu dili anlamak kolaydır çünkü operatörleri ve yapıları kolay anlaşılır ve hatırlanır. Çalışmak için, verileri oluşturmak (CREATE veya INSERT), seçmek (SEÇ) ve silmek (DROP veya DELETE) ve bunları değiştirmek (GÜNCELLEME, DEĞİŞTİR) için ifadelere ihtiyacınız vardır. Spesifik örneklerde, bunlardan sadece birkaçını kullanacağız.

Kullanıcı hesaplarını ayarlamayı ve gerekli erişim haklarını atamayı atlamak için yönetici (kök) hesabını kullandığınızı varsayalım.

Aşama 1

Bir terminal penceresi açın (Linux veya Windows 9x / NT / 2000 için X Window GUI kullanıyorsanız) ve komut satırına mysql girerek MySQL DBMS'ye bağlanın. Yanıt olarak, mysql> komutları istenmelidir.

Adım 2

Şunu girerek veritabanımızı oluşturalım:

VERİTABANI OLUŞTUR db_website;

Her komuttan sonra (;) yazmayı unutmayın. Komut girişini sonlandırmak için MySQL'e bir sinyal gönderdiği için çok önemlidir.

db_website'yi kullanın;

4. Adım

Alanlarında saklanacak verilerin türünü tanımlayacağımız bir tbl_news_items tablosu oluşturalım. Girmek:

1.CREATE TABLE tbl_news_items (2.col_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, 3.col_title VARCHAR (100), 4.col_author VARCHAR (100), 5.col_body TEXT, 6.col_date DATE 7.);

Adım 5

Artık verilerimizi tutmak için bir tablo oluşturduğumuza göre, onu bazı örnek verilerle doldurmamız gerekiyor. Aşağıdaki komutta col_id alanını tanımlamayacağımızı unutmayın, çünkü yeni veriler eklendikçe bu alan otomatik olarak doldurulur. Ayrıca, tarih sözdiziminin<год/месяц/день>... Bu nedenle, mysql> isteminde aşağıdaki komutu girin.

8. INSERT INTO tbl_news_items (col_title, _ col_author, col_body, col_date) 9. DEĞERLER (10. 'İlk basın bültenim', 11. 'Adınız', 12. 'Bu basın bülteni MySQL veritabanında saklanıyor', 13 '2001/4/15' 14.);

Eklemek için birkaç benzer sorgu daha girin. Veritabanında nelerin depolandığını görüntülemek için mysql> isteminde şunu yazın:

tbl_news_items'DEN * SEÇİN;

Perl'de dinamik web sayfaları oluşturma

İşe hazırlık

Perl programlarını çalıştırmak için, UNIX veya Win32 için Perl Standard veya ActiveState Perl dağıtımlarının Perl yorumlayıcı sürümü 5.005 veya 5.6'ya ihtiyacınız vardır. Win32 altında çalışacak uygulamalar geliştiriyorsanız, ActiveState paketinin kullanımı biraz daha uygundur, ayrıca ek modüller yüklemek için bir PPM yardımcı programı içerir.

Perl programlarımızın MySQL DBMS ile etkileşimini düzenlemek için Perl paketinin DBI modülünü içermesi gerekir. Modül temelde kendi başına hiçbir şey yapmadığı, ancak veritabanlarıyla etkileşim için tüm işlemleri bunlara karşılık gelen sürücüye kaydırdığı için, DBD-Mysql kitaplığının (DBI modülü için MySQL veritabanı için bir sürücü) kurulması gerekir. Modülün yazarı ve geliştiricisi Tim Bunce'ın dediği gibi, “DBI, Perl programlarından veritabanlarına erişmek için bir API'dir. DBI API spesifikasyonu, veritabanlarıyla şeffaf bir şekilde arayüz oluşturmak için kullanılan bir dizi işlevi, değişkeni ve kuralı tanımlar.

Veritabanı sürücüleri kavramı çok uygundur, çünkü Perl uygulamanızda standart DBI çağrıları kullanırsınız, bunlar daha sonra ilgili sürücüye modüller iletilir ve bunlar da teknik özellikleri incelemenize gerek kalmadan doğrudan veritabanı ile etkileşime girer. her bir belirli DBMS'nin. Böylece DBD :: Sybase, DBD :: Oracle, DBD :: Informix, vb. sürücüler vardır. ( pilav. 1 , ).

Yazının kapsamını biraz aşalım. DBI paketinin belirli bir DBMS için bir sürücü içermediğini varsayalım. Bu durumda, DBD-ODBC köprüsü kurtarmaya gelir. Bu DBMS'nin türünü, bağlantı kurmak istediğiniz ana bilgisayar adresini, veritabanı adını seçmeniz gereken ODBC sürücüsü (Açık Veri Tabanı Bağlantısı) için yeni bir veri kaynağı (Veri Kaynağı Adı) oluşturmanız yeterlidir. ve yetkilendirme verileri, yani kullanıcı adı ve şifre ( pilav. 3). Ardından, DBI modülünü kullanarak veritabanıyla etkileşime geçin. Ek olarak, Win32 :: ODBC (Win32-ODBC) modülü genellikle ActiveState Perl'in standart dağıtımında bulunur. Onunla çalışmak DBI ile çalışmaktan biraz farklıdır, ancak genel olarak çok benzerdir. Tek fark, Win32 :: ODBC'nin yalnızca Win32 modülü olmasıdır ve yerel ODBC işlevleriyle DBD :: ODBC'den daha verimli çalışmanıza olanak tanır.

ODBC ve DBI arasında bir paralellik çizilebilir. DBI, ODBC Yöneticisine (Veritabanı Sürücü Yöneticisi) benzer. Her DBD sürücüsü, işlevlerinde bir ODBC sürücüsüne karşılık gelir. Kafa karıştırıcı olabilecek tek şey, yukarıda belirtildiği gibi bir DBD :: ODBC sürücüsünün olmasıdır. Ancak yalnızca ODBC sürücüleriyle bir DBI bağlantısı kurmanıza izin verir.

Win32'deki PPM yardımcı programını kullanarak DBI ve DBD-Mysql'i kurmak için şunu girin:

Ppm, DBI'yi kurun

Bu noktada bilgisayarınızın internete bağlı olması gerektiğini lütfen unutmayın. Yerel diskinizde ilgili modül varsa, şu komutu girerek yardım bilgilerini kullanın:

Ppm yardım kurulumu

UNIX kullanıcıları için, DBI modülünü kurmak, diğer Perl modüllerini kurmakla hemen hemen aynı olacaktır:

Tar –zxvf DBI-1.06.tar.gz cd DBI-1.06 / perl Makefile.PL make test make install yap

CPAN kabuğunu da kullanabilirsiniz. Bilgisayarınızda ActiveState paketinin UNIX sürümü kuruluysa, PPM kurulum yardımcı programı ile de çalışabilirsiniz. Bazen, bilgisayarınızın bağlı olduğu kurumsal ağda bir güvenlik duvarı veya güvenlik duvarı kuruluysa CPAN ve PPM kabukları çalışmaz. Bu durumda sadece kaynak kodu manuel olarak yüklenen modüller size yardımcı olacaktır. Bunları kurmak ve Perl veya Apache'ye bağlanmak için bir Perl yorumlayıcısına, bir C / C ++ veya GCC / PGCC derleyicisine ve bazı make build yardımcı programlarına (UNIX klonlarından biri ve Microsoft Visual C tarafından sağlanır) ihtiyacınız vardır. ++), nmake veya dmake. Bu nedenle, modülleri kurma prosedürü biraz karmaşıktır. Hemen hemen her biri, başlamanızı kolaylaştıracak "yapı" belgeleriyle birlikte gelir.

Makalelerin bir listesini görüntüleme

Artık çalışan bir basın bülteni veritabanınız olduğuna göre, onu bir Web sayfasına kolayca bağlayabilirsiniz. Mevcut tüm basın bültenlerinin bir listesini görüntüleyen basit bir sayfa oluşturarak başlayalım. Apache Web sunucusunun varsayılan olarak tüm belgelerinizin htdocs dizininde ve yürütülebilir dosyaların da cgi-bin'de olması gerektiğini "düşündüğünü" unutmayın. Bu nedenle .pl uzantılı tüm dosyaları cgi-bin dizinine yerleştirmek gerekir. Buna karşılık, oluşturulan HTML şablon dosyaları tpl dizinine yerleştirilmelidir. Dizin hiyerarşisi şöyle görünecektir:

/ (herhangi bir diskin kökü) / local / local / usr / local / usr / bin / local / usr / cgi-bin / local / usr / htdocs / local / usr / tpl

DOS / Windows sistemleri için cgi-bin yolu şöyle görünebilir:

C: \ yerel \ usr \ cgi-bin

Aşama 1

Favori metin düzenleyicinizi kullanarak pr-list-tpl.htm dosyasını oluşturun:

15. 16. 17. Basın Bültenleri 2001 18. 19. 20. @[e-posta korumalı] 21. 22.

Bu dosya, mevcut tüm basın bültenlerinin bir listesini görüntülemeyi amaçlamaktadır.

Adım 2

Bulunan basın bülteniyle birlikte her bloğu bir tablo olarak görüntüleyecek bir pr-list-block-tpl.htm dosyası oluşturun:

23.

24. 25. 26.
@[e-posta korumalı]
@[e-posta korumalı], _ @[e-posta korumalı]

Aşama 3

Basın bülteninin içeriğini gösterecek bir pr-content-tpl.htm dosyası oluşturun:

27. 28. 29. Basın bültenleri 2001: @ TITLE @ 30. 31. 32.

@[e-posta korumalı]

33. 34. 35. 36. 37.
@[e-posta korumalı]
Yazar: @[e-posta korumalı] Tarih: @ [e-posta korumalı]
@[e-posta korumalı]
38. Basın bültenlerinin listesini göster .. 39. 40.

4. Adım

db_website veritabanındaki verileri okuyacak ve şablon HTML dosyalarını kullanarak bir basın bültenleri listesi görüntüleyecek bir Perl betiği pr-list-dbi.pl oluşturun (bu betiğin metnini CD'mizde bulabilirsiniz).

Şimdi kod listesini gözden geçirelim ve basın bülteni listeleme programının nasıl çalıştığını görelim.

1-9 arasındaki satırlar, tüm global değişkenlerin ve sabitlerin bildirildiği bir başlatma bloğu gibidir:

41. #! / Yerel / usr / bin / perl 42.43. DBI kullanın; 44. $ dbh = DBI-> connect ('dbi: mysql: db_website', 'root', ''); 45. $ yol = "/ yerel / usr / tpl"; 46. ​​​​$ TPL_LIST = "$ yol / pr-list-tpl.htm"; 47. $ TPL_LIST_BLOCK = "$ yol / pr-list-block-tpl.htm"; 48. 49. "İçerik türü: metin / html \ n \ n" yazdır;

İlk olarak, Apache web sunucusuna, komut dosyası istendiğinde çalışan, hata olup olmadığını kontrol eden ve ardından çalıştıran Perl yorumlayıcısının nerede olduğunu gösteren bir yol söyleriz. Ardından, veritabanı ile etkileşim kurmak için programda kullanılacak olan DBI (Veritabanı Arayüzü) modülünü ilan ediyoruz (3. satır). Ardından, oturum açma kullanıcı adı olarak root (yönetici) ve parola olarak boş bir dize (varsayılan) belirterek db_website (4) veritabanımıza bir bağlantı kurarız. $ path değişkeninde, HTML şablon dosyalarının bulunduğu yolu belirtin (5). Sırasıyla $ TPL_LIST ve $ TPL_LIST_BLOCK değişkenlerinde isimlerini belirtiyoruz (6, 7). Ardından, HTML akışını kullanıcının tarayıcısına (9) göndermek için Web sunucusuna tüm giden verilerin MIME metin / html formatında sunulması gerektiğini söyleriz.

11-22 arasındaki satırlar programın gövdesini temsil eder:

50.51.açık (L, "$ TPL_LIST"); 52. while ($ satır1 = ) (53. chomp ($ satır1); 54. if ($ satır1 = ~ / \ @ BLOK \ @ /) (55. read_db (); 56. ins_data (); 57.) else (58. "$ satır1 yazdır" \ n "; 59.) 60.) 61. kapat (L); 62.63 $ dbh-> bağlantıyı kes;

pr-list-tpl.htm (11) şablon dosyasını açın ve okunan her satırı $ line değişkenine yazarak bir döngü (12-20) içinde inceleyin. Her yineleme sırasında, bu satırda @ anahtar sözcüğünün varlığını kontrol ederiz. [e-posta korumalı](14-19), bu, bu yere bir basın bülteni içeren bir blok eklemeniz gerektiği anlamına gelir. Bulunduğunda, read_db() ve ins_data() prosedürlerini çağırırız.

26-39 arasındaki satırlar, basın bültenlerimizi saklayan tbl_news_items tablosunun içeriğini okuyan read_db() rutininin gövdesidir:

64.65.66. sub read_db (67. $ c = 0; 68. my ($ sql) = "SELECT * FROM tbl_news_items"; 69. $ rs = $ dbh-> hazırla ($ sql); 70. $ rs -> 71. while (benim $ referansım = $ rs-> fetchrow_hashref ()) (72. $ id [$ c] = "$ referans -> ('col_id')"; 73. $ başlık [$ c] = " $ referans -> ('col_title')"; 74. $ yazar [$ c] = "$ referans -> ('col_author')"; 75. $ tarih [$ c] = "$ referans -> (' col_date ' ) "; 76. $ c ++; 77.) 78. $ rs-> bitiş (); 79.)

$c = 0 sayacını başlatıyoruz, tablodan (28) tüm verileri seçmek için bir sorgu oluşturuyoruz, sorguyu (29, 30) yürütüyoruz ve verileri kayıt kümesine (kayıt kümesi) $ rs alıyoruz. Daha sonra bir döngüde (31-37) fetshrow_hashref yöntemini kullanarak kayıt kümesinden veri çıkarırız ve geçerli kaydın alanlarının adlarını ve değerlerini içeren ilişkisel dizi %ref (31)'e bir referans döndürürüz. Çıkarılan verileri (32-35) türlerine karşılık gelen @id, @title, @author ve @date dizilerine yazıyoruz. Kayıt setini (38) kapatıyoruz.

41-53 arasındaki satırlar, veritabanından çıkarılan verilerin giden veri akışına eklenmesini uygulayan ins_data () prosedürünün gövdesidir; 55-63 satırları - ins_data() prosedüründen bir döngüde çağrılan pr_block() prosedürünün gövdesi:

80. 81. sub ins_data (82. $ toread = "pr-read-dbi.pl"; 83. for ($ i = 0; $ i)<$c; $i++) { 84. $line = &pr_block; 85. 86. $line =~ s/\@NUMBER\@/$id[$i]/; 87. $line =~ s/\@TITLE\@/$title[$i]/; 88. $line =~ s/\@AUTHOR\@/$author[$i]/; 89. $line =~ s/\@DATE\@/$date[$i]/; 90. $line =~ s/\@READ\@/$toread/; 91. print "$line"; 92. } 93. } 94. 95. sub pr_block { 96. my($block) = ‘’; 97. open (B, "$TPL_LIST_BLOCK"); 98. while ($line=) (99. $ blok = $ blok. $ Satır; 100.) 101. kapat (B); 102. dönüş ($ blok); 103.)

Böylece, read_db() prosedürü sonucunda $c sayacının maksimum değerini aldıktan sonra, döngüde (43-52) pr-list-block- içeriğini okuyan pr_block() prosedürünü çalıştırıyoruz. tpl.htm HTML şablonu ve onu $ bloğu (59) değişkenine yazar, bu daha sonra ins_data() prosedürünün $ line (44) değişkeninde (62) döndürülür. Aynı döngüde, giden $ satır akışında bulunan @ anahtar kelimelerini (46-50) değiştiririz [e-posta korumalı], @[e-posta korumalı], @[e-posta korumalı], @[e-posta korumalı], @[e-posta korumalı]@id, @title, @author, @date dizilerinin değerlerine ve bu döngü yinelemeye karşılık gelen $ toread değişkenine ($ i).

Basın bülteninin metnini görüntüleme

Veritabanında bulunan tüm basın bültenlerinin bir listesini görüntüledikten sonra ( pilav. 4), kullanıcıya bunlardan birinin metnini görüntüleme fırsatı vermeniz gerekir (ilgili komut dosyasını CD'mizde de bulabilirsiniz).

Yeni pr-read-dbi.pl betiği, daha önce oluşturduğumuz pr-list-dbi.pl betiğinden biraz farklı olacaktır.

Bu liste, bazı küçük farklılıklar olsa da, liste 1'e %98 benzer:

  • sorgu dizesinden id (9) parametresini okumak için bağlı CGI kitaplığı (örneğin, http: //localhost/cgi-bin/pr-content-dbi.pl? id = 1);
  • yalnızca bir HTML şablonu kullanılır (pr-content-tpl.htm);
  • veritabanı sorgusu, col_id tanımlayıcısı tarafından belirli bir basın açıklamasına karşılık gelen tüm verileri seçmek için koşullu bir SQL WHERE yan tümcesi ile desteklenir;
  • seçilen basın bülteninin metnini içeren col_body alanı da veritabanından okunur.

Yeni bir basın bülteni oluşturma

tbl_news_items tablosunu yeni bilgilerle doldurmak için doğrudan veritabanıyla çalışmaya gerek kalmadan yeni basın bültenleri oluşturma yeteneği ekleyerek sistemimizin işlevselliğini genişleteceğiz.

Bu nedenle, (önceki ikisi gibi CD'de bulunan) yeni Perl programı, öncelikle verileri görüntülemek için değil, veritabanına eklemek için tasarlandığından öncekilerden farklı olacaktır. Bu nedenle, SQL INSERT sorgusunu ve DBI modülünün ilgili ifadelerini kullanarak veritabanı ile etkileşimden sorumlu kısmı biraz değiştirmeliyiz.

12-18. satırlar ana programın gövdesidir:

12. if ($ cmd ne "add") (13. & show_form; 14.) else (15. $ dbh = DBI-> connect ('dbi: mysql: db_website', _ 'root', ''); 16 . & add_pr; 17.dbh-> bağlantıyı kes; 18.)

Burada ekibin basın bültenini veritabanına eklemek için gelip gelmediğini kontrol ediyoruz. Gelir gelmez veritabanına (15) bir bağlantı kuruyoruz, app_pr() alt programını (16) çalıştırıyoruz ve bağlantıyı (17) sonlandırıyoruz. Herhangi bir komut yoksa, basın açıklaması verileri için doldurma formunu (13) görüntülememiz yeterlidir - show_form () prosedürü.

20-36. satırlar, pr_add() basın bülteni ekleme rutininin gövdesidir:

19. 20. sub add_pr (21. $ başlık = $ q-> param ("pr_title"); 22. $ yazar = $ q-> param ("pr_author"); 23. $ gövde = $ q-> param ( "pr_body"); 24. $ gövde = ~ s / \ r \ n /
/ G; 25.26.my ($ sql) = "tbl_news_items'E GİRİN (col_title, col_author, col_body, col_date) DEĞERLER (\ '$ title \', \ '$ Author \', \ '$ body \', CURDATE()) "; 27. $ rs = $ dbh-> yap ($ sql); 28.29.if ( [e-posta korumalı]) (30. $ rc = $ dbh-> geri alma; 31.) else (32. $ rc = $ dbh-> taahhüt; 33.) 34. 35. print "Konum: / cgi-bin / pr-list-dbi .pl \ n \ n "; 36.)

İlk olarak, formun (22-25) verilerini işliyoruz, bir SQL sorgusu oluşturuyoruz (27) ve DBI yöntemini $ dbh-> do() kullanarak yürütüyoruz (27). Veritabanına veri girme prosedürü burada gerçekleştirildiği için, arıza durumunda işlemin iptal edilme olasılığına dikkat etmeniz gerekir. Bunu yapmak için, işlemi geri alma ve geri alma kodunu önceki duruma (30-34) ekledik. $ dbh-> do () başarısız olursa, yapılan değişiklikleri geri alın (31). Arıza oluşmadıysa, yapılan değişiklikleri onaylarız (33). Ardından, tüm işlemlerden sonra, tüm basın bültenlerinin (36) listesini içeren sayfaya gidin.

37-55 arasındaki satırlar, yeni basın bülteni hakkında bilgi girmek için form çıktı prosedürünün gövdesidir (adı $ TPL_INSERT değişkeninde belirtilen HTML şablonu kullanılır, pr-add-tpl.htm):

37. 38. sub show_form (39. print "Content-type: text / html \ n \ n"; 40. 41. open (L, "$ TPL_INSERT"); 42. while ($ line = ) (43. chomp ($ satır); 44. if ($ satır = ~ / \ @ /) (45. if ($ satır = ~ / \ @ ADD \ @ /) (46. $ toadd = "pr-add -dbi.pl "; 47. $ satır = ~ s / \ @ ADD \ @ / $ toadd /; 48.) else (49. $ tolist =" pr-list-dbi.pl "; 50. $ satır = ~ s / \ @ LIST \ @ / $ liste /; 51.) 52.) 53. "$ satır \ n" yazdır; 54.) 55. kapat (L);

Sistem aşırı yüklenmesi

Dinamik bir Web sitesi geliştirdiğiniz için, üzerindeki bilgi miktarı buna göre çok hızlı bir şekilde büyüyebilir. Ek olarak, kaynağınızın popülaritesi arttıkça, sunucunun aşırı yüklenmesine, yani sistem performansının düşmesine neden olabilecek ziyaretçi sayısı da artar. Donanımın gücünü artırmanın yollarını aramaya ve yeni bir sistemin yapılandırmasını bulmaya başlamadan önce, aşırı RAM tüketiminin olası nedenlerinden birini ortadan kaldırmayı deneyebilirsiniz. Aynı Perl suçlu olabilir. Gerçek şu ki, belirli bir Perl betiğine her eriştiğinizde, Web sunucusu yorumlayıcıyı RAM'e yükler (sabit diskte 500-1000 KB alır) ve ikincisi, sözdizimi hatalarını aramak için programı baştan sona ayrıştırır. ... Bundan sonra, değişkenleri ve fonksiyonları başlatarak tekrar okur, girdi verilerini (parametreleri) okur, işler ve sonuçları döndürür. Basın bültenleri aynı zamanda sitenize gelen yüzlerce ziyaretçiyi görmek isterse ne olacağını hayal edebiliyor musunuz?

Bu süreci hızlandırmak için Apache Web sunucusu - mod_fastcgi ve mod_perl için ek modüller olan özel çözümler oluşturulmuştur.

FastCGI modülü (mod_fastcgi), işletim sisteminin çalışan süreçleri (görevleri) arasında veri alışverişi araçlarının kapsamlı bir şekilde kullanıldığını varsayar. Web sunucusu, çalışmasının başlangıcında, CGI programını etkinleştirir ve programı ve birkaç kopyasını arka planda çalışır durumda bırakır. Programa yapılan herhangi bir istek, halihazırda aktif olan kopyalara aktarılacaktır, bu da sunucuyu işlemin yeniden etkinleştirilmesiyle ilişkili ek yükten kurtaracaktır.

mod_perl modülü, Perl'i Apache web sunucusunun kendisiyle aynı adres alanında RAM'e yüklemenize ve ikincisi çıkana kadar Perl'i bellekte bırakmanıza, CGI programına erişirken yorumlayıcının bir sonraki kopyasının yüklenmesini önlemenize izin verir. Bu modül, programda herhangi bir değişiklik gerektirmediğinden FastCGI'dan daha sık kullanılır.

BilgisayarBasın 6 "2001

Statik sayfaları yönetme arabirimi, üzerinde çeşitli öğelerin bulunduğu tek bir entegre bloktan oluşur (Şekil 5.1).
Aslında, bu sayfa "Başlık" ve "Sayfa adresi" sütunlarını içeren bir tablo görüntüler.
En üstte, sayfalandırmada kaç tane statik sayfa görüntüleneceğini belirleyebileceğiniz bir giriş alanı bulunur.
Ayrıca statik sayfalarda 3 toplu işlem mevcuttur - sil, yayınla, yayından kaldır.

Yeni bir sayfa ekleme

Yeni bir sayfa eklemek için "Statik Sayfa Ekle" sekmesine tıklayın (Şekil 5.2).

Bundan sonra, doldurmanız gereken bir form içeren bir sayfaya yönlendirileceksiniz. (Şekil 5.3).


şekil 5.3

Dikkat: başlık alanı ve sayfanın gövdesi zorunludur.

başlık- yeni sayfanın adı belirtilir. Başlık verileri, tarayıcı penceresinin başlık çubuğunda görünen Başlık etiketinin içeriğidir.
Alto. isim- burada bu sayfaya bir bağlantı sağlamalısınız. Dikkat: bağlantı Latince olmalı ve özel karakterler ve boşluklar içermemelidir.
Açıklama- arama motorları tarafından indeksleme için kullanılan sayfanın kısa bir açıklamasını oluşturmak için kullanılır.
anahtar kelimeler- anahtar kelime meta etiketi için anahtar kelimeler.

Ayarlar
  • Yayınla - bu bayrak seçilirse, bu sayfa sitede görüntülenmeyecektir.
  • HTML etiketlerini kullanmaya izin ver - bu bayrak seçiliyse, sayfanın gövdesinde bb kodlarına ek olarak html etiketlerini kullanabilirsiniz.
  • Otomatik biçimlendirmeyi devre dışı bırak - bu bayrak seçilirse, metin otomatik biçimlendirme, satır kaydırma vb. devre dışı bırakılır.
Örneklem- burada belirli sayfanın kullanacağı şablonu belirtmeliyiz.
Şablon / şablonlar / (şablon_adı) / statik / dizininde bulunmalı ve .tpl uzantısına sahip olmalıdır
Fok
Konunun devamı:
Çeşitli

Bugün, İnternet'teki sosyal ağlar, insanları belirli bir temelde bir ağda bir araya getiren özel sitelerdir. Büyümelerinde...