Pekka'nın kabul ettiği cevap eksik ve genel bağlamda yanıltıcıdır. Dosya göreceli bir yol olarak sağlanmışsa, çağrılan dil yapısı include
onu aşağıdaki şekilde arayacaktır.
İlk olarak, include_path
ile ayarlanabilen ortam değişkeninin yollarından geçecektir ini_set
. Bu başarısız olursa, çağıran betiğin kendi dizininde dirname(__FILE__)
( __DIR__
php> = 5.3 ile) arayacaktır. Bu da başarısız olursa, ancak o zaman çalışma dizininde arayacaktır! Sadece, varsayılan olarak, ortam değişkeninin şu anki çalışma dizini olan include_path
ile başladığı ortaya çıktı .
. Mevcut çalışma dizininde ilk olarak arama yapmasının tek nedeni budur. Bkz. Http://php.net/manual/en/function.include.php .
Dosyalar, verilen dosya yoluna göre dahil edilir veya hiçbiri belirtilmezse, belirtilen include_path. Dosya include_path içinde bulunamazsa, include sonunda başarısız olmadan önce çağıran komut dosyasının kendi dizinini ve geçerli çalışma dizinini kontrol eder.
Dolayısıyla, sorunun ilk kısmının doğru cevabı, dahil edilen arama komut dosyasının nerede olduğunun önemli olmasıdır. Sorunun son kısmının cevabı , bir web sunucusu bağlamında ilk çalışma dizininin, PHP tarafından işlenirken diğerlerinin tümünü içeren, çağrılan betiğin dizini olmasıdır. Bir komut satırı bağlamında, ilk çalışma dizini, çağrılan betiğin bulunduğu dizin olmak zorunda değil, php komut isteminde çağrıldığında olduğu gibi olur. Geçerli çalışma dizini Ancak PHP fonksiyonu ile işletilen anda değiştirilebilir chdir
. Bkz. Http://php.net/manual/en/function.chdir.php .
Bu paragraf, diğer cevaplara yorum yapmak için eklenir. Bazıları, güvenmenin include_path
daha az sağlam olduğunu ve bu nedenle ./path
veya gibi tam yolların kullanılmasının tercih edildiğini belirtmişlerdir __DIR__ . /path
. Bazıları, çalışma dizininin .
kendisine güvenmenin güvenli olmadığını, çünkü değiştirilebilir olduğunu söyleyecek kadar ileri gitti . Bununla birlikte, bazen çevre değerlerine güvenmeniz gerekir. Örneğin, include_path
boş ayarlamayı isteyebilirsiniz , böylece çağıran betiğin dizini, mevcut çalışma dizininden önce bile arayacağı ilk yer olur. Kod zaten harici kaynaklardan düzenli olarak yazılmış ve güncellenmiş olabilir __DIR__
ve kod her güncellendiğinde öneki yeniden eklemek istemezsiniz .