include dirname(__FILE__).'/../../index.php';
buradaki en iyi bahsinizdir ve diğer çözümlerde karşılaşabileceğiniz göreceli yol hatalarının çoğunu önleyecektir.
Aslında, dahil etmeyi her zaman bu kodun yerleştirildiği geçerli betiğin konumuna göre zorlayacaktır (uygulamanızın mimarisini tanımladığınız için büyük olasılıkla hangi konum kararlıdır). Bu, sadece include '../../index.php'
yürütme (aynı zamanda "çağırma" olarak da adlandırılır) komut dosyasını ve ardından , dahil ettiğiniz komut dosyasının yolundan çözümlemek yerine, komut dosyanızı içeren ana komut dosyasını gösterecek olan mevcut çalışma dizinine göre farklıdır. .
PHP belgelerinden:
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.
Ve bu numaraya atıfta bulunarak bulduğum en eski gönderi , Tapken tarafından 2003 yılına dayanıyor .
Aşağıdaki kurulumla test edebilirsiniz:
Bunun gibi bir düzen oluşturun:
htdocs
¦ parent.php
¦ goal.php
¦
+---sub
¦ included.php
¦ goal.php
In parent.php
koymak:
<?php
include dirname(__FILE__).'/sub/included.php';
?>
In sub/included.php
koymak:
<?php
print("WRONG : " . realpath('goal.php'));
print("GOOD : " . realpath(dirname(__FILE__).'/goal.php'));
?>
Erişirken elde edilen sonuç parent.php
:
WRONG : X:\htdocs\goal.php
GOOD : X:\htdocs\sub\goal.php
Gördüğümüz gibi, ilk durumda, yol çağıran komut dosyasından çözümlenirken parent.php
, dirname(__FILE__).'/path'
hile kullanılarak dahil etme, included.php
kodun yerleştirildiği komut dosyasından yapılır .
Dikkat edin, aşağıdakiler başka yerlerde okunabileceklerin aksine yukarıdaki hile ile eşdeğer DEĞİLDİR:
include '/../../index.php';
Aslında, önceden harcama /
işe yarayacaktır, ancak tıpkı include ../../index.php
çağıran komut dosyasındaki gibi çözülecektir ( aradaki fark, include_path
başarısız olursa daha sonra bakılmayacak olmasıdır). PHP dokümanından :
Bir yol tanımlanırsa - ister mutlak (Windows'ta bir sürücü harfiyle veya \ ile veya Unix / Linux sistemlerinde / Unix / Linux sistemlerinde) veya mevcut dizine göre (. Veya .. ile başlayan) - include_path tamamen yok sayılır.