Bilgisayar dersleri

Php bir kez açıklama gerektirir. PHP işlevleri: require(), require_once(), include(), include_once()

Sayfa Düzenleri

13.22. require() operatörü

require() ifadesi, C++ programlama dilindeki #include() önişlemci yönergesine benzer şekilde çalışır. Bu dile aşina iseniz aşağıdaki operatörlere hakim olmak sizin için zor olmayacaktır ancak aşina olmasanız bile bu operatörlerin çalışma prensiplerini daha detaylı anlatmaya çalışacağız. require() operatörü, yolu ve adı operatör bloğunda belirtilen dosyaların içeriğini değiştirir ve çağırır:

require("yol/dosyaadi.html");

fopen_wrapper_SB PHP URL parametreleri etkin olarak ayarlanmışsa (bunlar genellikle varsayılandır), o zaman dosyayı, gerekli dosyanın yerel yolunu kullanmak yerine bir URL (Tekdüzen Kaynak Bulucu) kullanarak require() ifadesinde de tanımlayabilirsiniz. require() ifadesi, örneğin:

$url = http://my_new_adress/index.phtml;

require() ifadesi bir işlev değildir. Büyük olasılıkla buna bir dil yapısı denilebilir. Bu operatörü neden bir fonksiyon olarak değerlendiremiyoruz:

Require() herhangi bir kontrol yapısına bağlı değildir;

Require() işlevi herhangi bir değer döndürmez, bu da bir fonksiyonun yaptığı şeydir.

require() ifadesinden herhangi bir değeri çağırma girişimi, hatayla sonuçlanacak ve programın daha fazla yürütülmesini kesintiye uğratacaktır.

include'dan farklı olarak require, yürütülmediğinde bile her zaman dosyanın adres satırını okur. Bir dosyayı koşullu olarak eklemeniz gerekiyorsa include() ifadesini kullanın. Basitçe koşullu ifadeler require deyimiyle çalışırken etkili sayılmaz, ancak requre deyiminin bulunduğu satır yürütülmezse, o adresteki dosyadaki tek bir kod satırı bile yürütülmeyecektir. Bu durumda dosyaya require() operatörü aracılığıyla erişildiği için bu mantıklıdır.

Döngü yürütme yapıları require() ifadesinin davranışını etkilemez, ancak sonuçtaki dosyada bulunan kod yine de döngüye tabidir. Bundan, require ifadesinin include()'dan farklı olarak yalnızca bir kez çalıştırıldığı sonucuna varabiliriz.

Bu nedenle, require() ifadesini tüm talimatlarla birlikte bir döngü ifadesi bloğuna yerleştiremez ve döngü çalışırken bu ifadenin her yinelemede farklı yürütülmesini bekleyemezsiniz. Bundan yararlanmak için include() operatörünü kullanmanızı öneririz.

Bir dosya require() ifadesiyle çalıştırıldığında, içerilen cbd, requre() işleminin yürütüldüğü satırın değişken yeteneklerini devralır. Bu satırda mevcut olan tüm değişkenler, çağrılan dosyada mevcut olacaktır. Bir require ifadesi, çağıran dosyanın içindeki bir işlevin içindeyse, çağrılan dosyanın içerdiği tüm kod, sanki bu dosyanın içinde tanımlanmış gibi davranacaktır.

require() ifadesi, HTTP üzerinden çağrılan ve fopen sarmalayıcıları kullanan bir dosya üzerinde çalışıyorsa ve istasyon adresi, sonuçta ortaya çıkan dosyayı PHP kodu olarak yorumluyorsa, bu durumda değişkenler, -request URL'si kullanılarak require() ifadesine iletilebilir. HTTP Get yöntemi gibi. Aynı şey değil. komut dosyası, komut dosyasının uzak sunucuda yürütülmesine pratik olarak devam ettiği için require deyimi dosyasının çağrılması ve sonuçların daha sonra yerel komut dosyasına dahil edilmesi:

/* sunucu tarafından işlenmediğinden çalışmayacaktır */

require("http://my_domain_name/file.txt?varone=1&vartwo=2");

/* dosya adı "file.php?varone=1&vartwo=2" olduğundan çalışmıyor

yerel dosya sistemini hedefler */

require("file.php?varone=1&vartwo=2");

/* hatasız çalışacak */

require("http://my_domain_name/test.php?varone=1Svartwo=2");

require("file.txt");

require("dosya.php");

Bu örnekler, require() operatörünün nasıl kullanılacağını açıkça anlamanıza ve program oluştururken hata yapmaktan kaçınmanıza yardımcı olacaktır. Daha sonra, require() ifadesine benzeyen include() ifadesine ve nasıl çalıştığına bakacağız.

PHP'nin en eğlenceli ve kullanışlı özelliklerinden biri başka bir dosya eklemektir. Örneğin, bir web sitesinde bir üst menü, bir alt menü ve bunların arasında sayfa içeriğinin kendisi bulunur. Ve örneğin sitenin 10 sayfasında alt menü kullanılıyor. Bir noktada, üzerinde değişiklik yapılması gerekiyordu. Html'de her bir dosyada manuel olarak değişiklik yaparsınız, ancak php siteyle çalışmayı önemli ölçüde basitleştirmenize olanak tanır! Alt menünün kodu ayrı bir dosyada bulunabilir ve 10 sayfanın her birine bu ayrı dosyayı kolayca ekleyebilirsiniz! Yani, tüm değişikliklerin artık yalnızca menü içeren dosyada yapılması gerekiyor ve diğer 10 dosyada değişikliklerle birlikte görüntülenecek.

Basit Rusça dilinde php'de bağlantının anlamı:

Dosya 1.php
Üst Menü

Dosya 2.php
Alt menü

Örnek.php dosyası
Dosya 1.php'yi bağlayın
Sayfa içeriği
Dosya 2.php'yi bağlayın

example.php dosyasının işlenmesi sonucunda görüntülenecektir
Üst Menü
Sayfa içeriği
Alt menü
Buna göre alt menüde herhangi bir şeyi değiştirmek için sadece 2.php dosyasında değişiklik yapmanız gerekiyor.

Dosyanın yolu

Dosya, dosya için belirtilen yola göre bağlanır. İki yol seçeneği vardır: göreceli ve mutlak. Göreli - bu, bağlantı talimatlarını içeren dosyaya göre bağlı dosyanın yolunun bir göstergesidir. Mutlak - dahil edilen dosyanın tam yolunu belirtir.

PHP kodu

// göreceli yol örneği
"include/your_file.php" ifadesini ekleyin; // dosya, bağlantı dosyasıyla aynı dizinde bulunan include klasöründedir

// mutlak yol örneği
include $_SERVER["DOCUMENT_ROOT"]."/include/your_file.php"; // $_SERVER["DOCUMENT_ROOT"] - sitenin kök dizinini belirtir

include ve include_once

katmak()- PHP betiğinin yürütülmesi sırasında dosyaları PHP betiği koduna dahil etmek için tasarlanmış bir yapı. Kodu işlerken talimatın yerini ekli dosyanın içeriği alır. Hemen bir örneğe bakmanızı öneririm.

Örnek olarak iki dosyayı kullanarak include'ın nasıl çalıştığına bakalım: index.php Ve metin.php. İşin basitliği açısından, bunların aynı dizinde bulunduğunu varsayalım.

PHP kodu(dosya index.php)

Echo "Ana dosyada bulunan düz metin";
"text.php"yi dahil edin; // text.php dosyasının içeriğini dahil et

?>
PHP kodu(dosya metin.php)

Echo "İçerilen dosyanın içerdiği metin";

?>
index.php dosyasını çalıştırmanın sonucu şöyle olacaktır:

Ana dosyada bulunan düz metin
Dahil edilen dosyanın içerdiği metin
Gerçekten uygun mu? Artık text.php dosyasının içeriğini değiştirdiğimizde index.php'nin sonucu tamamen farklı olacaktır!

Şimdi başka bir tasarımdan bahsedelim - include_once. Dahil etmeyle tamamen aynı şekilde çalışır, yalnızca daha sonra oluşturulur ve dosyanın yeniden eklenemediği durumlar için kullanılır. Örneğin, bir hata sonucunda bir dosyayı 2 veya daha fazla kez bağlamaktan korkuyorsunuz, bu da sayfanın düzgün çalışmamasına ve ilgili hata mesajının alınmasına neden olacaktır.

PHP kodu

Include_once "text.php"; // text.php dosyası yalnızca bir kez dahil edilecek

// aşağıdaki yeniden bağlantılar dikkate alınmayacak ve görüntülenmeyecek
// ve bir hata mesajının görüntülenmesine neden olmaz
include_once "metin.php"; // hiçbir şey olmayacak

gerektirir ve require_once

require ve require_once talimatları, yalnızca bir özellik dışında include ve include_once ile aynı şekilde çalışır - eğer dahil edilen dosya bulunamazsa, komut dosyası yürütme durdurulur (komut dosyası artık okunmaz), include ve include_once ise yalnızca bir uyarı görüntüler. ve betiğin daha fazla yürütülmesine devam edin.

Dahil etme veya gerektirme çalışmıyorsa

Dahil etmenin neden işe yaramadığını anlamak için her şeyi adım adım kontrol etmenizi öneririm. Aşağıdaki noktalar ne kadar açık ve yüzeysel olursa olsun, her şeyi en baştan kontrol edin.

1. Sunucunuzun ve php'nizin çalışıp çalışmadığını ve sitedeki herhangi bir php kodunun çalışıp çalışmadığını kontrol edin
2. Dahil etme dosyasının mevcut olup olmadığını kontrol edin
3. Bağlantıda dosya adının ve uzantısının doğru girilip girilmediğini kontrol edin
4. Dahil edilen php dosyasının gerçekten belirttiğiniz adreste bulunduğundan emin olun
5. Göreli bir yol yerine mutlak bir yol (dosyanın tam yolu) belirtmeyi deneyin.

Örnek PHP kodu

"http://www.example.com/include/dosyanız.php" adresini ekleyin;

// DOCUMENT_ROOT - kaynağın kök dizinini belirtir
include $_SERVER["DOCUMENT_ROOT"]."/include/your_file.php";

6. Dosyanız bağlanmıyorsa ve herhangi bir hata görüntülenmiyorsa, bağlandığınız dosyanın bulunduğu dizinde bir dosya oluşturun. .htaccess aşağıdaki içerikle

Php_flag display_errors Açık
veya php dosyasında, bağlanmadan önce aşağıdaki satırı yapıştırın

Error_reporting(E_ALL);
Her iki ayar da hataların görüntülenmesini zorlayacaktır

PHP Operatörleri: require(), require_once(), include_once()

Tarih: 2012-10-15

PHP işlevleri: require(), require_once(), include(), include_once()

Son dersimizde çalışmayı detaylı olarak ele aldık. Operatörün şunu hatırlatmak isterim katmak() PHP'de bir web sayfasının içeriğini başka bir web sayfasıyla değiştirir. Ancak PHP'nin benzer bir görevi uygulamanıza izin veren başka işlevleri de vardır. Özellikle işlevler şunlardır:

include_once()
gerekmek()
require_once()

Belirli bir web sayfasının içeriğini eklemek için, istenen dosyanın yolunu bu işlevlere argüman olarak (parantez içinde) belirtmek yeterlidir. Örneğin şöyle:

include("file.php") veya require("file.php")

Tüm bu işlevlerin görevi aynıdır: İstediğiniz kodu veya metni bir dosyadan başka bir dosyaya ekleyin. Ancak yine de bu işlevler birbirinden farklıdır. Hadi çözelim.

Son ek " _bir kere", kaç çağrı yapılırsa yapılsın, bir dosyanın kodunu başka bir dosyaya yalnızca bir kez bağlamak üzere bağlamanıza olanak tanır. Açıklık sağlamak için basit bir örneğe bakalım. Son derste, operatörü kullanmanın şunu anladık: katmak(), site başlığını ayrı bir dosyaya koyabilirsiniz başlık.php Basitlik açısından sitenin grafik logosunu bu dosyaya yerleştirdiğimizi varsayacağız. Web sayfasında doğru yere (bu durumda site başlığının yerine) kodu yazıyoruz Listeleme 1.

Listeleme 1.

Daha sonra buna göre site logosu da yaklaşık olarak şu şekilde iki kez görüntülenecektir:

Katılıyorum, pek hoş görünmüyor, değil mi? Operatörün olduğu ortaya çıktı katmak() iki kez klasörden çıkarır bloklar dosya başlık.php ve bunu site başlığının yerine iki kez değiştirir.

Genel olarak içerilen dosya, kaynak dosyaya eklendiğinde hata oluşturabilecek ve web sayfanızın hiç yüklenmemesine yol açabilecek işlevler içerebilir.

Büyük sitelerde nereye, hangi dosyayı dahil ettiğiniz ve tekrar ekleyip ekleyemeyeceğiniz konusunda kafa karışıklığı çok kolaydır ve bu da hataya yol açabilir. Bu yüzden "ön ekini buldular" _bir kere"işlevlere katmak Ve gerekmek, bir dosyanın içeriğini başka bir web sayfasına yalnızca bir kez gömer.

include()'un require()'dan farkı nedir?

Şimdi fonksiyon hakkında konuşalım katmak() işlevden farklı gerekmek(). Aralarında işlerinde hiçbir fark yoktur. Her iki işlev de bir dosyanın içeriğini diğerine dahil eder. Ancak aralarında bir fark var ve bu, bağlandığımız dosyanın yerinde olmadığı bir duruma tepki verme şekillerinde yatıyor.

Önceki örnek koda geri dönelim Listeleme 1. Aşağıdaki koda sahibiz:

Include("bloklar/başlık.php");

Dosyayı silmeyi deneyelim başlık.php Aslında bağlandığımız , örneğin dosya hasar görmüş veya yanlışlıkla kuzeyden silinmiş.

Test dosyasını güncelliyoruz ve şu hatayı görüyoruz:

Gördüğünüz gibi dizinde (klasörde) olduğunu belirten bir mesaj beliriyor. bloklar dosya bulunamadı başlık.php, ancak program hala yürütülüyor ve sitenin web sayfasının geri kalanı normal şekilde görüntüleniyor.

Peki ya kod yazarsak ( Listeleme 3) işlevi kullanarak gerekmek():

Listeleme 3.

Require("blocks/header.php");

Sahip olduğumuz şey bu yalnızca bir hata mesajı görüntülenecek, ve program artık yürütülmeyecek ve yalnızca bu mesajı göreceksiniz.

Bildiğiniz gibi PHP'nin diğer dosyaları dahil etmek için 4 işlevi vardır. Bu katmak, include_once, gerekmek Ve require_once. Nasıl farklılık gösterirler ve nasıl doğru şekilde kullanılırlar?

Öncelikle aradaki farka bakalım katmak Ve gerekmek. Bu iki işlev yalnızca dahil edilen bir dosyanın yokluğuna verdikleri tepki bakımından farklılık gösterir. İşlev katmak(“enable”), belirtilen dosya eksikse, E_WARNING gibi bir hata mesajı üretecektir ancak programın yürütülmesi devam edecektir. Onun aksine, gerekmek("gerekli"), eğer dahil edilen bir dosya yoksa, önemli bir hata (E_ERROR) oluşturur ve bu da çalışan betiğin anında durmasına yol açar.

Böylece kodunuzun nasıl yürütüldüğüne dair bilginize dayanarak bir veya başka bir operatörü kullanabilirsiniz. Örneğin, bu yalnızca programın akışını genellikle etkilemeyen bir HTML parçasıysa veya bunlar, programın geri kalanının normal şekilde çalışabileceği bazı küçük eklentilerse, o zaman kullanmaktan çekinmeyin. katmak. Diğer durumlarda kullanmanızı öneririm gerekmek. Bu, kodun yanlış yürütülmesi olasılığını önleyecek ve bir hata durumunda (örneğin, dahil edilen dosyanın bir virüs tarafından silinmesi veya geliştirme süreci sırasında kaybolması) komut dosyası sonlandırılacaktır. Gelecek makalelerden birinde, koddaki tüm standart dışı durumları nasıl takip edeceğinizi ve site içinde olup bitenlerden nasıl haberdar olacağınızı size göstereceğim.

Şimdi yapılara bakalım include_once Ve require_once. Basitten katmak Ve gerekmek aynı dosyaların tekrar dahil edilmesini önleyen "_once" bitişiyle ayırt edilirler.

Örneğin, dahil ettiğiniz dosya sınıfların veya işlevlerin açıklamalarını içeriyorsa, bu tür bir dosya tekrar eklenemez çünkü dosya tekrar yürütülür ve PHP, zaten var olan adlara sahip sınıfları veya işlevleri tanımlamaya çalışırken ölümcül bir hata verir. Hiç şüphe yok ki kodu hiçbir zaman yeniden bağlanma olmayacak şekilde tasarlamak mümkündür ancak bu gereksiz kısıtlamalar ve gereksiz bir çalışmadır. Bu nedenle “_once” son ekine sahip işlevler yararlı ve gereklidir.

Uygulamamda iki tür dosya kullanıyorum. İlk tür, bir veya daha fazla sınıf içeren ve “doğrudan” yürütülen kod içermeyen dosyalardır. Bu tür dosyaları her zaman kullanarak bağlarım require_once. İkinci tür ise HTML ve bazı PHP kodları içeren şablonlar veya şablon parçalarıdır. Bu tür dosyaları kullanarak bağlarım gerekmekçünkü bazen aynı şablon parçası bir sayfada birkaç kez kullanılabilir.

asla kullanmam katmak Ve include_onceÇünkü bir dosyanın yokluğunun, taviz vermeden acil çözüm gerektiren kritik bir durum olduğunu düşünüyorum. Varlığı şüpheli olan bir dosyayı eklemem gerekirse, ilk önce is_file() işlevini kullanarak onun varlığını kontrol ederim.

Include'ı kullanırken bir püf noktası daha var. Bunun aslında bir fonksiyon değil, bir dil yapısı olmasına rağmen, dahil edilen dosyanın içindeki operatör çalışır. geri dönmek. Bu nedenle, include bu değeri çağrılan koda döndürür. Şuna benziyor

$ret = 'dosya.php'yi dahil et;

Bugünlük bu kadar, doğru programlayın!

Kapsama gerektiren yapı

Tasarım gerekmek Bir PHP betiğini çalıştırmak için bir PHP betiğine dosya eklemenizi sağlar. Genel sözdizimi gerekmekçok:

dosya adı gerektirir;

Programı başlatırken (tam olarak başlangıçta, yürütme sırasında değil!), yorumlayıcı talimatı basitçe dosya_adı dosyasının içeriğiyle değiştirecektir (bu dosya aynı zamanda her zamanki gibi etiketlerle çerçevelenmiş bir PHP betiği de içerebilir). Ve ?> ). Üstelik bunu programı başlatmadan hemen önce yapacaktır (farklı olarak katmak, aşağıda tartışılmaktadır). Bu, komut dosyası çıktısına HTML kodu içeren çeşitli şablon sayfalarını dahil etmek için oldukça kullanışlı olabilir. İşte bir örnek:

Header.html dosyası:

Bu bir başlık

Footer.html dosyası:
Ev Şirketi, 2005.

Script.php dosyası
"header.htm" gerektirir;
// Komut dosyası belgenin gövdesini kendisi görüntüler
"footer.htm" gerektirir;
?>

Yani tasarım gerekmek PHP betiklerini birkaç ayrı dosyadan birleştirmenize olanak tanır; HTML-sayfalar ve php-Kodlar.

Tasarım gerekmek uzak dosyaların eklenmesini destekler (PHP 4.3.0'dan beri). Örneğin:

// Aşağıdaki örnek yerel bir dosya eklemeye çalıştığı için çalışmıyor
"file.php?foo=1&bar=2" gerektirir;
// Aşağıdaki örnek işe yarıyor
gerekmek ;
?>

! Tasarım gerekmek Bu özellik PHP yapılandırma dosyasında etkinleştirilmişse, uzak dosyaları eklemenizi sağlar.

Uzak dosyalar dahil

PHP, normal dosyalar gibi URL nesneleriyle çalışmanıza olanak tanır. Varsayılan olarak mevcut olan paketleyiciler, ftp veya http protokolünü kullanarak uzak dosyalarla çalışmak için kullanılır.

PHP'de "fopen sarmalayıcı URL'leri" varsa (varsayılan yapılandırmada olduğu gibi), yerel yol yerine bir URL (HTTP aracılığıyla) kullanılarak eklenecek dosyayı belirtebilirsiniz. Hedef sunucu, hedef dosyayı PHP kodu olarak yorumlarsa, değişkenler, HTTP GET'te olduğu gibi bir URL sorgu dizesi kullanılarak içerme dosyasına aktarılabilir. Açıkçası bu, bir dosyayı dahil etmek ve onun ana dosyanın değişkenlerinin kapsamını miras almasını sağlamakla aynı şey değildir; sonuçta komut dosyası uzak bir sunucuda çalışır ve sonuç daha sonra yerel komut dosyasına dahil edilir.

Dosyaların uzaktan dahil edilebilmesi için yapılandırma dosyasında (php.ini) ayarlamanız gerekir. izin_url_fopen=1.

Not: PHP 4.3.0'dan önceki Windows PHP sürümleri, izin_url_fopen seçeneği etkin olsa bile, bu özellikle uzak dosyaların kullanılması özelliğini desteklemez.


/* Bu, www.example.com'un.php'yi ayrıştırmak üzere yapılandırıldığını varsayar
* dosyaları, .txt dosyaları değil. Ayrıca buradaki "Çalışıyor", değişkenlerin
* $foo ve $bar ekteki dosyada mevcuttur. */

//file.txt, www.example.com tarafından PHP gibi işlenmediğinden çalışmaz
gerekmek "http://www.example.com/file.txt?foo=1&bar=2";

// Yerelde "file.php?foo=1&bar=2" dosyasını aradığı için çalışmayacak
// dosya sistemi.
"file.php?foo=1&bar=2" gerektirir;

// Aşağıdaki örnek işe yarar:
gerekmek "http://www.example.com/file.php?foo=1&bar=2";

$foo = 1;
$bar = 2;
"file.txt" gerektirir; // İşler
"file.php" gerektirir; // İşler

?>