Menu

PHP include ve require: Başka PHP Dosyalarını Yükleme

include 'header.php'; başka bir PHP dosyasını o noktada, sanki kodu oraya yapıştırılmış gibi çalıştırır. require aynısını yapar ama dosya eksik olduğunda betiği ölümcül bir hatayla durdurur, include ise yalnızca uyarır ve devam eder. include_once ve require_once bir dosyayı yalnızca ilk seferde yükler.

Bu sayfada çalıştırılabilir editörler var - düzenle, çalıştır ve sonucu anında gör.

include 'header.php'; başka bir PHP dosyasının kodunu betiğin o noktasında, sanki oraya yapıştırılmış gibi çalıştırır. require 'header.php'; aynısını yapar, ama dosya yüklenemezse require betiği ölümcül bir hatayla durdurur, include ise yalnızca bir uyarı yazdırır ve devam eder. Olağan ilk kullanım her sayfanın paylaştığı bir üst ve alt bilgidir (header ve footer).

Blok önce header.php ve footer.php dosyalarını yazar, böylece dahil edilecek dosyalar olur. Çalıştırın ve Page sekmesine bakın:

Dahil edilen dosyalar sıradan PHP dosyalarıdır: <?= ?> etiketleriyle HTML içerebilirler ve require öncesinde ayarlanan $title değişkenini görürler. Başlığı değiştirin ve tekrar çalıştırın; üst bilgiyi require eden her sayfa o tek dosyadaki bir değişikliği alırdı.

include ile require

Tek fark dosya eksik veya okunamaz olduğunda ne olduğudur. include iki uyarı yazdırır, false değerini verir ve betik devam eder:

Warning: include(sidebar.php): Failed to open stream: No such file or directory in /home/index.php on line 2

Warning: include(): Failed opening 'sidebar.php' for inclusion (include_path='.:/usr/share/php83') in /home/index.php on line 2

require aynı uyarıyı yazdırır ve ardından bir şey onu yakalamadıkça betiği bitiren bir Error fırlatır:

PHP Warning:  require(config.php): Failed to open stream: No such file or directory in /home/index.php on line 2
PHP Fatal error:  Uncaught Error: Failed opening required 'config.php' (include_path='.:/usr/share/php83') in /home/index.php:2

Bu yüzden sayfanın onsuz çalışamayacağı her şey (yapılandırma, fonksiyon kütüphaneleri, sınıf dosyaları) için require, isteğe bağlı parçalar için include kullanın. Meşru olarak bulunmayabilecek bir parça için uyarıya güvenmek yerine önce onu kontrol edin:

Çıktı:

Spring sale: 20% off
banner.php included, include returned int(1)
sidebar.php not found, skipped

include_once ve require_once

Bir fonksiyon veya sınıf tanımlayan bir dosya yalnızca bir kez yüklenebilir: ikinci kez yüklemek ölümcül bir hatadır, çünkü fonksiyon zaten vardır.

Fatal error: Cannot redeclare greet() (previously declared in /home/helpers.php:2) in /home/helpers.php on line 2

Bu, iki dosyanın her biri require 'helpers.php' yaptığı anda olur. require_once ve include_once hangi dosyaların zaten yüklendiğini hatırlar ve ikinci seferde true döndürerek onları atlar:

Çıktı:

int(1)
bool(true)
bool(true)
Hello, Ada

Bir şeyler tanımlayan dosyalar için _once biçimlerini, birden fazla kez çıktı vermek istediğiniz şablonlar için düz include kullanın. Composer kullanan projelerde otomatik yükleyici sınıf dosyalarını sizin için yükler, bu yüzden sınıflar için require_once çağrıları büyük ölçüde ortadan kalkar; bkz. Composer.

Dahil edilen bir dosyadan değer döndürme

Dahil edilen bir dosyanın en üst seviyesindeki bir return o dosyayı durdurur ve include veya require ifadesine bir değer geri verir. Bu temiz bir yapılandırma dosyası sağlar: global değişken yok, yalnızca istediğiniz ada atadığınız bir değer.

Çıktı:

My Shop
shop
bool(false)

Laravel'in yapılandırma dosyaları (config/app.php, config/database.php ve diğerleri) bu şekilde çalışır.

Dahil edilen dosyalarda değişkenler ve kapsam

Dahil edilen kod onu dahil eden satırın kapsamında çalışır. Bir betiğin en üstünde her global değişkeni görür; bir fonksiyonun içinde yalnızca o fonksiyonun yerel değişkenlerini görür. İkinci kural küçük bir şablon işleyicinin çalışma şeklidir: yerel değişkenleri tam olarak şablonun görmesi gereken değişkenler olan bir fonksiyon.

Page sekmesi tek bir şablon dosyasından oluşturulan iki listeyi de gösterir. include render() içinde çalıştığı için şablon $heading ve $products değişkenlerini görür ama $secret değişkenini görmez. Şablonda kullanılan foreach ... endforeach biçimi PHP'nin HTML şablonları için sunduğu alternatif söz dizimidir.

Dahil etme yolları ve DIR

'helper.php' gibi bir yol include içeren dosyaya göre çözümlenmez. PHP include_path ayarında arar (normalde geçerli çalışma dizini olan . ile başlar) ve ancak sonra dahil eden dosyanın kendi klasörüne bakar. Yani partials/nav.php içinde include 'helper.php' proje kökünden tamamen farklı bir helper.php dosyasını yükleyebilir. Geçerli dosyanın dizini olan __DIR__ tahmini ortadan kaldırır:

Çıktı:

loaded the root helper.php
loaded partials/helper.php
__DIR__ in nav.php is partials

Her dahil etmeyi __DIR__ . '/relative/path.php' olarak yazın. Çalışma dizini betiğin nasıl başlatıldığına (web sunucusu, bir cron işi, başka bir klasörden komut satırı) bağlıdır, ama __DIR__ asla değişmez.

Kullanıcının adını verdiği bir dosyayı asla dahil etmeyin

Yaygın bir ilk yönlendirici sayfa adını URL'den okur: include $_GET['page'] . '.php';. Bu bir ziyaretçinin sunucudaki hangi dosyanın çalışacağını seçmesine izin verir, örneğin ?page=../../config (yerel dosya dahil etme) ve eski ayarlarla başka bir sunucudan bir dosyayı bile. Bunun yerine izin verilen adları dosyalara eşleyin. Bloğu çalıştırın ve bağlantılara tıklayın: her tıklama betiği farklı bir $_GET['page'] ile yeniden çalıştırır.

require ifadesine yalnızca $pages içindeki üç ad ulaşabilir; ../secret bağlantısı "Not found" sayfasını alır. İstek değerlerini güvenle okumak GETve_GET ve _POST sayfasında anlatılıyor.

Sıkça Sorulan Sorular

PHP'de include ile require arasındaki fark nedir?

İkisi de başka bir PHP dosyasını yükler ve çalıştırır. Dosya yüklenemezse require betiği ölümcül bir hatayla durdurur, include ise bir uyarı yazdırır, false döndürür ve betiğin devam etmesine izin verir. Yapılandırma ve fonksiyon kütüphaneleri gibi sayfanın onlarsız çalışamayacağı dosyalar için require kullanın.

require yerine ne zaman require_once kullanmalıyım?

Fonksiyon, sınıf veya sabit tanımlayan dosyalar için require_once kullanın. Böyle bir dosyayı iki kez yüklemek ölümcül bir hatadır (Cannot redeclare) ve require_once dosya zaten yüklenmişse onu atlar. Birkaç kez yazdırmak istediğiniz şablonlar düz include kullanır.

Dahil edilen bir PHP dosyası değer döndürebilir mi?

Evet. Dahil edilen dosyanın en üst seviyesindeki bir return onu bitirir ve include veya require ifadesinin değeri olur: config.php içinde return ['debug' => true]; ile $config = require 'config.php';. Bir return olmadan include 1 değerini verir.

Dahil edilen bir dosya değişkenlerime erişebilir mi?

Evet. Dahil edilen kod onu dahil eden satırın kapsamında çalışır: bir betiğin en üstünde global değişkenleri, bir fonksiyonun içinde ise yalnızca o fonksiyonun yerel değişkenlerini görür. Oluşturduğu değişkenler de aynı kapsama düşer.

include('file.php') mi yoksa include 'file.php' mi yazmalıyım?

İkisi de çalışır, çünkü include ve require fonksiyon değil dil yapılarıdır; parantezler yalnızca yolu sarar. Çoğu stil kılavuzu parantezsiz require 'file.php'; yazar.

Coddy programlama dilleri çizimi

Coddy ile kodlamayı öğren

BAŞLA