Php dersleri örneklerini ekleyin. PHP'de dosyaları bağlama ilkesi

21.01.2018

Henüz değil


Herkese selam!
PHP'nin temellerini sıfırdan öğrenmeye devam edelim!
Bu derste size şunu söyleyeceğim: php'ye dosya nasıl eklenir.
Neden php'ye bir dosya eklemeniz gerekiyor?

Bir dakika, şimdi her şeyi öğreneceksin.
Bahsettiğim 16 numaralı dersimizi hatırlıyor musunuz?
Böylece, örneğin “function.php” gibi bir dosya oluşturabilir ve site için kullanmanız gereken tüm işlevleri buraya yazabilirsiniz. Geriye kalan tek şey “function.php” dosyasını site sayfasına bağlamak ve bu kadar. Bu kullanışlıdır ve sitenin ana sayfasında hiçbir gereksiz kod yoktur.

Size harici php dosyalarını bağlamayı kullanabileceğiniz başka bir örnek vereceğim.
Örneğin başlık, menü, içerik ve altbilgiden oluşan 100 sayfalık bir web siteniz var.
Ve aniden menüye başka bir bölüm eklemeniz gerekiyor. Düşünün: bunun için düzeltme yapmak için 100 dosyanın açılması gerekiyor.

Ancak, örneğin “menu.php” gibi ayrı bir dosya oluşturup bunu menünün olması gereken yere sitenize bağlarsanız tüm bunlardan kaçınabilirsiniz. Ve bundan sonra sadece “menu.php” dosyasında düzeltme yaparsanız sitenin geri kalan 100 sayfasında da otomatik olarak değişiklik gerçekleşecektir. Bu şekilde site üstbilgisini, altbilgisini vb. bağlayabilirsiniz. Uygun, değil mi?
Sanırım bu makalenin sonunda bunun nasıl organize edileceğini bir örnekle göstereceğim.
Yani, harici php dosyalarını bağlamak için iki ana dosya vardır: dahil etme tasarımları: gerekmek Ve katmak .

Dahil etme yapısı

yapıyı dahil et kodunuza dosya eklemenizi sağlar PHP betiği komut dosyası çalışırken.

include yapısının sözdizimi şöyledir:

Bir klasördeyse:

Bu kodla bir “function.php” dosyası oluşturun:

Şimdi “index.php” dosyasında “function.php” dosyasını (satır No. 2) bağlamayı deneyelim:

Sonuç:

Dikkat: Bazen “function.php” dosyasını unutup tekrar eklemeyi deneyebilirsiniz (satır No. 2, No. 3):

Bunun sonucunda önemli bir hata meydana gelebilir veya dosya içeriği yeniden görüntülenebilir. Benim durumumda bir hata olacak:

Ölümcül hata: Sreturn() (daha önce O:\home\localhost\www\php\function.php:2'de bildirilmişti) yeniden bildirilemiyor O:\home\localhost\www\php\function.phpçevrimiçi 5

Eğer fonksiyonun kendisini kaldırır ve metni yazarsanız (“function.php” dosyası):

Tabii ki, “index.php” dosyasında fonksiyon çıktısını da kaldırın:

o zaman sonuç basitçe kendini tekrarlayacaktır.

Merhaba! Merhaba!

Bu tür hataları önlemek ve dosyanın yeniden bağlanmasını önlemek için “include” ifadesi yerine kullanmalısınız. "include_once" talimatı.

"include_once" yapıları

“include_once” yapısının sözdizimi şöyledir:

Örnek (satır No. 2, No. 3):

İki bağlantı olmasına rağmen dosya yalnızca bir kez bağlanacaktır, yani dosya zaten bağlı olduğundan bağlantı göz ardı edilecektir.

Kapsama gerektiren yapı

yapı gerektirir PHP betiğini çalıştırmadan önce dosyaları PHP betiğine eklemenizi sağlar.

Yapının sözdizimi " gerekmek»:

Bir klasördeyse:

Eğer kodumuzda aynı dosyayı içeren birden fazla require ifadesi ile karşılaşırsak yorumlayıcı hata verecektir. Bu durumu önlemek için kullanmanız gerekir "require_once" talimatı:

"require_once" yapıları

Dikkat:"include", "include_once", "require" veya "require_once" aracılığıyla var olmayan bir dosyayı eklerseniz sonuç bir hata olacaktır:

Uyarı: include_once(function1.php): akışı açamadı: 2. satırdaki O:\home\localhost\www\php\index.php dosyasında böyle bir dosya veya dizin yok

Şimdi söz verdiğim gibi sitenin menü, başlık ve altbilgisini siteye nasıl bağlayacağınızı göstereceğim. Örnek olarak sizin ve benim ders çalışırken yaptığımız hazır bir web sitesini ele alacağım.

Bu siteyi aşağıdaki dosyalara bölelim:

Bu nedenle, (veya barındırmada) bir “Deneme” klasörü oluşturun. Deneyebileceğiniz yeni bir site olacak.

"Deneme" klasöründe "include" adında başka bir klasör oluşturun. Anladığınız gibi, “include” klasörü bağlantı dosyalarını (“menu.php”, “heder.php” ve “footer.php”) içerecektir.

Şimdi “include” klasörüne gidin ve orada aşağıdaki kodla bir “menu.php” dosyası oluşturun:

ANASAYFA HAKKIMDA HİZMETLER GERİ BİLDİRİM

"Heder.php" adında başka bir dosya oluşturun ve şu kodu yapıştırın:

İnternet sitesi

HTML temelleri eğitimi

"Footer.php" adında başka bir dosya oluşturun ve şu kodu yapıştırın:

© 2016

Şimdi “include” klasöründen çıkıp “index.ph p” ana dosyasını oluşturuyoruz
(not: "index.txt" değil) HTML ", yani "indeks. php ") bu kodla:


EV

Dosyaları 19, 32, 38 numaralı satırlara bağladım.
Lütfen sadece "include_once" aracılığıyla çıktısı alınan kod bölümlerini gösterdiğimi unutmayın, sadece anlaşılması açısından, aksi takdirde yorumlar kaldırılabilir, kod daha kısa olur ve dosya daha hafif olur:

Bir web sitesi için HTML'nin temelleri üzerinde pratik yapın


EV

İşte metin olacak ana sayfa

Şimdi bu kodu kalan “obo-mne.php”, “uslugi.php”, “obratnaja-svjaz.php” dosyaları için kopyalayın, yalnızca başlığın metnini ve içeriğin kendisini değiştirin.

Hepsi bu, izleyin ve kontrol edin.
Tam mutluluk için (resimlerin görüntülenmesi için), resimlerle birlikte bir "resim" klasörü oluşturmayı unutmayın.

PHP'nin temelleri hakkındaki lezzetli dersleri kaçırmamak için blog güncellemelerine abone olun.

Önceki yazı
Sonraki giriş

Çoğu zaman büyük bir programı birkaç dosyaya bölmeye ihtiyaç vardır. Ayrıca başka bir geliştiricinin komut dosyasını programınıza bağlamanız da gerekebilir. Ve bu hemen hemen PHP'de üçüncü taraf dosyalarını bağlama Bu yazımda size anlatacağım.

Önce bir dosya oluşturalım " a.php", içine şu satırları yazıyoruz:

echo "Bu a.php dosyasındaki betiğin çalışmasıdır";
?>

Şimdi başka bir dosya oluşturalım (örneğin, " b.php") ve içindeki betiği bağlayın " a.php":

"a.php" gerektirir;
?>

Nasıl tahmin ettin PHP'de üçüncü taraf bir dosyayı bağlama kullanılarak gerçekleştirilen yapılar gerektirir. Basitçe söylemek gerekirse basit bir dille, bu yapı basitçe tüm kodu kopyalar " a.php" ve içine ekler " b.php". Çok önemli nüans: dosyanın yolu doğru yazılmalıdır ve mutlak yollar yazıldığı için mutlak değil göreceli bir yol yazmaya çalışın. yapılar gerektirir sıklıkla devre dışı PHP ayarları, güvenlik için. Ayrıca yalnızca bağlanabilirsiniz PHP dosyaları, ama aynı zamanda diğerleri. Örneğin, sıklıkla bağlantı kurarlar HTML dosyaları. Bir zamanlar bir web sitesi hazırlarken tekrar eden belirli şeyleri (örneğin menüler, sayaçlar, telif hakları vb.) kopyalamamak için onları doldurdum. HTML Kodu ayrı bir dosyaya. Ve sonra her sayfaya bu dosyaları ekledim. Sonuç olarak, örneğin menüde bir değişiklik yapmak için yalnızca dahil edilen bir dosyayı düzeltmem gerekiyordu ve bundan hemen sonra tüm site dönüştürüldü. Yani bu tasarım son derece kullanışlıdır ve en azından çok zaman kazandırır.

Ancak çok önemli nokta. Bu sorundan nasıl kaçınılır: Diyelim ki iki geliştirici büyük bir program yapıyor. Bulunan ilk geliştirici hazır seçenek görevinin bir kısmını yerine getirdi ve kullanarak bağladı gerekmek. İkinci geliştirici de kendi görevi için tamamen aynı hazır çözümü buldu ve ayrıca gerekmek Senaryoyu bağladım. Daha sonra her iki geliştirici de parçalarını bir araya getirdiğinde hatalar ortaya çıkacaktır. Neden? Ve hepsi aynı senaryoyu iki kez bağladıklarından. Basit bir örneğe bakalım:

"a.php" gerektirir;
"b.php" gerektirir;
echo "Bu c.php dosyasındaki betiğin çalışmasıdır";
?>

Bu betiği çalıştırırsanız, " a.php"İki kez bağlandık ama sadece bir kez aradık. Neden böyle oldu? Ama dosyada olduğu için" b.php"aynı zamanda bağlantı kuruyor. Ortaya çıkan sorun da bu. Ve çok basit bir şekilde çözülebilir: require_once yapıları. Her şeyi aynı şekilde yapar, ancak dosya zaten bu komut dosyasına dahil edilmişse onu bağlamaz. Dosyayı düzeltelim" b.php":

require_once "a.php";
echo "Bu b.php dosyasındaki betiğin çalışmasıdır";
?>

Şimdi betiği çalıştırırsak " c.php", o zaman dosyayı göreceğiz" a.php"beklendiği gibi yalnızca bir kez başladı. Şahsen ben size her zaman kullanmanızı tavsiye ederim require_once yapısı, elbette aynı şeyi birkaç kez eklemeniz gerekmediği sürece (bu da bazen gereklidir). Bu şekilde gereksiz hatalardan kaçınacaksınız.

Ve son olarak, aynı zamanda kullanabileceğiniz iki benzer tasarımdan daha bahsetmek istiyorum. PHP'ye üçüncü taraf dosyaları dahil etme- Bu katmak Ve include_once. Yukarıda tartışılanlara tamamen benzerler, ancak küçük bir fark var. Yapılar durumunda gerekmek Ve require_once, eğer dahil edilen dosya bulunamazsa, komut dosyasının yürütülmesi kesintiye uğrayacaktır. Ve kullanırken katmak veya include_once bir uyarı görüntülenecek ve komut dosyası çalışmaya devam edecektir. Bütün fark bu. Hatta kontrol edip kendi gözlerinizle görmenizi tavsiye ederim.

Yapmak program kodu Daha okunabilir olması için, örneğin işlevlerin ve/veya sınıfların tanımlarını ayrı bir dosyaya koyabilirsiniz. PHP'ye dosya ekleme yeteneği dört dil talimatıyla sağlanır:

  • katmak
  • gerekmek
  • include_once
  • require_once

Dört talimatın tümü parametre olarak bir isim alabilir yerel dosya. Include ve require ifadeleri eylem olarak çok benzerdir ve yalnızca istenen kaynağı elde etmenin imkansızlığına verdikleri tepki açısından farklılık gösterir. Örneğin, bir kaynak kullanılamıyorsa, include ve include_once bir uyarı verir ve programın yürütülmesine devam etmeye çalışır. require ve require_once, istenen kaynak kullanılamıyorsa sayfayı işlemeyi durdurur.

katmak

İnclude ifadesi, PHP betiğinize başka betikler eklemenizi ve eklemenizi sağlar. Program başladığında, tercüman talimatı basitçe dahil edilen dosyanın içeriğiyle değiştirecektir. Nasıl çalıştığına bakalım, add.php adında bir dosya oluşturup içine şunu yazalım:

Şimdi başka bir dosya oluşturalım ve buna add.php dosyasını ekleyeceğimiz örneğin test.php adını verelim:

\$var2 = $var2" ?>

Örnekte görebileceğiniz gibi, include ifadesi, programınızın diğer değişkenlere, işlevlere, sınıflara vb. erişmesini sağlayan, dahil edilen dosyanın içeriğini ekler.

Not: Dahil edilen dosyalara herhangi bir ad verebilirsiniz, ancak her zaman .php uzantısını ekleyin, çünkü farklı bir uzantı kullanırsanız saldırganlar dosyanızı isteyebilir ve web sunucusu metnini döndürür. Bu bir güvenlik riskidir çünkü şifreleriniz veya programınızın çalışma şekli açığa çıkabilir ve saldırganlara arka kapı açılabilir. Bunun olmasını önlemek için, içerilen dosyaların PHP yorumlayıcısı tarafından işlenmesi gerekir.

Bir fonksiyonun içindeki bağlantı

Bir dosyanın dahil edilmesi bir fonksiyonun içinde gerçekleşirse, içerme dosyasındaki tüm kodlar sanki o fonksiyonun içinde tanımlanmış gibi davranacaktır; kodun yerel kapsamı olacaktır. Önceki örneği biraz yeniden yazalım:

Şimdi test.php'ye bir fonksiyon ekleyelim:

Genel kapsamda: $var1"; ?>

Fonksiyon içerisinde $var1 global olarak tanımladığımız için global kapsamda da kullanılabilir hale gelir.

Dosyanın yolu

Dosyalar, dosyanın belirtilen yoluna göre eklenir; yol belirtilmezse, include_path yönergesinde (php.ini yapılandırma dosyasında) belirtilen yol kullanılacaktır. Dosya include_path içinde belirtilen yolda bulunamazsa, include ifadesi dosyayı içeren betiğin bulunduğu geçerli çalışma dizinini kontrol etmeye çalışacaktır; include ifadesi dosyayı bulamazsa bir uyarı verilecektir.

Eğer bir yol belirtilirse - ister mutlak ister göreceli olsun (dahil betiğin bulunduğu geçerli dizine göre) - include_path yönergesi göz ardı edilecektir.

include_once

include_once davranışı include deyimiyle aynıdır; tek fark, dosyadaki kod zaten bir kez dahil edilmişse, tekrar dahil edilmeyecek ve çalıştırılmayacaktır. Bu, işlevlerin, değişkenlerin vb. geçersiz kılınması sorununun önlenmesine yardımcı olur. Bunun nasıl çalıştığını daha iyi anlamak için işte bir örnek:

Test.php'de aşağıdaki kodu çalıştırmayı deneyeceğiz:

Bu, işlevler geçersiz kılınamadığından bir hata mesajıyla sonuçlanacaktır. Bu tür hataları önlemek için include_once ifadesini kullanmalısınız. Test.php dosyasındaki kodu yeniden yazalım:

gerektirir ve require_once

require ve require_once ifadeleri, bir fark dışında include ve include_once ile aynı şekilde çalışır. Eğer include dosyası bulunamazsa, betiğin yürütülmesi durdurulacak, include ve include_once ise bir uyarı verecek ve betiğin yürütülmesine devam edecektir.

Tavsiye: include ve require kullanımını tamamen bırakmaya çalışın, bunların analoglarını _once sonekiyle kullanın. Bu, büyük ve karmaşık bir programın nispeten bağımsız modüllere bölünmesini kolaylaştıracaktır.

Son güncelleme: 11/1/2015

Program küçükse, fazla kod yoksa tüm işlemler tek dosyada tanımlanabilir. Ancak kural olarak bir program birçok talimattan oluşur. Tüm bu talimatların tek bir dosyada tanımlanması kodun bunaltıcı görünmesine neden olabilir. Bu nedenle kodun ayrı bölümleri genellikle dağıtılır. ayrı dosyalarözellikle bu kod parçaları diğer PHP programlarında kullanılabiliyorsa.

beyanı dahil et

Include ifadesi, aşağıdakileri içeren harici bir dosya içerir: php kodu. Örnek olarak bir dosya tanımlayalım. faktöriyel.php:

Faktöriyelin hesaplandığı yer burasıdır. Şimdi bağlanalım bu dosya programımıza:

Dosyadaki tüm kodlar include ifadesinin tanımlandığı yere eklenecektir faktöriyel.php. Bu durumda, bu dosyada tanımlanan fonksiyon kullanılmadan önce dosyanın eklenmesi gerekir.

include_once ifadesi

İnclude ifadesini kullanmanın dezavantajları vardır. Böylece istemeden aynı dosyayı kodun farklı yerlerine dahil edebiliriz, bu da kod çalıştırıldığında hatalara neden olur.

Dosyanın tekrar dahil edilmesini önlemek için include ifadesi yerine include_once ifadesini kullanmalısınız.

Ve şimdi, aynı dosyayı include_once kullanarak aşağıda başka bir yere eklersek, dosya zaten programa dahil olduğundan bu bağlantı göz ardı edilecektir.

require ve require_once ifadeleri

require ifadesi, include ifadesine benzer şekilde çalışır: aynı zamanda içeriğini programa ekleyen harici bir dosya içerir. Ancak şimdi, eğer bu dosya bulunamazsa program sonlandırılacaktır:

Ayrıca kodumuzda aynı dosyayı içeren birden fazla require ifadesi ile karşılaşırsak yorumlayıcı hata verecektir. Ayrıca bu durumdan kaçınmak için talimatları kullanmalısınız. require_once:

Not: Sitenin, tarayıcınızın küçük boyutuna otomatik olarak uyum sağlayan ve okuma kolaylığı için sitenin bazı ayrıntılarını gizleyen uyarlanabilir sürümü etkinleştirilir. İzlemenin tadını çıkarın!

Tüm blog okuyucularına iyi günler Alan Açık!

Bugün PHP'de dosya bağlamanın nasıl çalıştığından bahsedeceğiz. Fark etmiş olabileceğiniz gibi, bir web sitesine yönelik herhangi bir motor (Joomla, Wordpress, OpenCart, DLE ve her şey, her şey, her şey) binlerce .php (ve yalnızca php değil) dosyasından oluşur ve bunların hepsi birbiriyle etkileşime girer, bu da aslında çalışma mekanizması sitesi.

Şimdi motorları unutun ve başka bir örnek hayal edin: Sitede birçok sayfamız var, her birinde aynı menü, site başlığı ve alt bilgisi var. Doğal olarak aynı şeyi dosyadan dosyaya kopyalamayacağız, aksi takdirde 90'lardan kalma eski bir HTML sitesi ortaya çıkar. En azından her şeyi 4 dosyaya böleceğiz:

  • index.php – sayfanın ana kısmı, bu dosya değişecek
  • menu.php – site menüsü
  • başlık.php – site başlığı
  • footer.php – site altbilgisi

Ana sayfaya (index.php) ek olarak, örneğin, ürünlerin listesini (category.php) ve ürünlerin kendi sayfalarını (product.php) içeren sayfalarımız da olabilir. Bu sayfalara menu.php, başlık.php, footer.php dosyalarını bağlamak uygun olacaktır. Bu yaklaşım sayesinde, yeni bir menü öğesi eklersek, onu 3 kez (index.php, ürün.php,categor.php'de) değil, yalnızca bir kez (menü.php'de) ekleyeceğiz.

Bu nedenle şu soru ortaya çıkıyor: "PHP'de dosya nasıl eklenir?". Bu amaçlar için PHP'de 2 talimat vardır:

Ve bunların türevleri:

Include ve require'ın işlev olmadığına, bunların sözde dil yapıları olduğuna, dolayısıyla parantezlere gerek olmadığına dikkatinizi çekerim.

Dahil etmek ve gerektirmek arasındaki fark nedir

katmak Ve gerekmek- bu kesinlikle aynı şeydir; tek fark, bir hata olması durumunda (örneğin, belirtilen dosya mevcut değilse ve eklenemiyorsa), include'ın şöyle bir hata üretmesidir: Uyarı, bundan sonra site çalışmaya devam edecek ve sayfanın daha fazla yüklenmesini tamamen durduracak olan bir sorun çıkaracaktır.

Yani, gerekli talimat daha radikal ve katıdır. Hangisinin daha iyi kullanılacağına karar vermek size kalmış; genel olarak her zaman daha katı olan seçeneği seçmeniz önerilir, yani zorunlu, ancak kişisel olarak dahil kelimesini yazmayı daha keyifli buluyorum :)

include_once ve require_once - include ile aynı şeyi yapar (bir dosya içerir), ancak aynı zamanda her dosyanın birden fazla dahil edilmemesini sağlarlar. Bir proje üzerinde birkaç kişi çalışıyorsa ve belirli bir dosyanın birkaç kez eklenmediğinden emin olmanız gerekiyorsa, bunların kullanımı özellikle uygundur.

Dikkat:

include_once Ve require_once– daha yavaş çalışın ve daha fazla tüketin rasgele erişim belleği dahil etmek ve gerektirmekten daha fazlası. Bu mantıklıdır ve bağlı olan tüm dosyaları hatırlamaları ve her bağlandıklarında bu dosyanın zaten bağlı olup olmadığını kontrol etmeleri gerektiği gerçeğinden kaynaklanmaktadır.

PHP'de dosyaları bağlamanın nasıl çalıştığını açıkça göstereyim:

Dosyaları (herhangi biri, örneğin: html, txt, php, xml vb.) bir PHP betiğine bağlarken, içerikleri aptalca bir şekilde include yerine eklenir. Başka bir deyişle, içerme (ve aynı şey oldukları için zorunlu kılmayı da kastediyorum), (CTRL+C) kodunu bir yerden kopyalayıp (CTRL+V) bir dosyaya (örneğin, ürün) yapıştırmanızla aynıdır. php) ve ardından her zamanki gibi kaydedilip başlatıldı: http://your_site.net/product.php

Product.php gibi ana dosyaları, ona bağlandığımız dosyalardan (menu.php, başlık.php, altbilgi.php) ayırt etmek için, bağlı dosyalar şu şekilde yeniden adlandırılır: menu.inc.php, başlık .inc.php , footer.inc.php. Bu sayede bir klasöre gittiğimizde ana dosyaların nerede olduğunu ve yardımcı dosyaların nerede olduğunu hemen göreceğiz.

Dikkat:

Bu teknik (ekleme dahil) yalnızca görsel kolaylık sağlamak amacıyla kullanılır ve herhangi bir fonksiyonel farklılıklar kendi bünyesinde taşımaz. Ancak görsel rahatlık da çok önemlidir, bu nedenle her zaman her şeyi yapılandırmaya ve aynı tarzda yapmaya çalışın.

dönüş değeriyle birlikte ekle

Hatırlamak anahtar kelime? Yani PHP'de include içinde return gibi çılgın bir şey var. Bunu hiç kullanmadım ve başkalarının da kullandığını hiç görmedim, ancak bu mümkün, işte some.php:

Some.php'yi bağlayın:

// String'i yazdırır: PHP ?>

Biraz daha gerçek

  • Dosyaları PHP kodunun herhangi bir yerine dahil edebilirsiniz; iç kısım dahil;
  • Include (include), betiğin yürütülmesi sırasında tetiklenir; dahil edilen dosyalarda önceden hiçbir şey olmaz;
  • Dahil edilen dosya, içermenin bildirildiği satırla aynıdır. Yani, bir dosyanın ortasında bir yerdeyse global kapsam, bir işlevin içindeyse yerel kapsam. Bir kez daha vurgulamak isterim ki include, sanki kodu alıp include yerine bir dosyaya kopyalamışsınız gibi.

İlginiz için herkese teşekkürler ve harika bir hafta sonu geçirmenizi dileriz!