include dirname(__FILE__).'/../../index.php';
เป็นทางออกที่ดีที่สุดของคุณที่นี่และจะหลีกเลี่ยงข้อบกพร่องของเส้นทางสัมพัทธ์ส่วนใหญ่ที่คุณสามารถพบได้ในโซลูชันอื่น ๆ
อันที่จริงจะบังคับให้การรวมสัมพันธ์กับตำแหน่งของสคริปต์ปัจจุบันที่วางโค้ดนี้เสมอ (ตำแหน่งใดน่าจะเสถียรที่สุดเนื่องจากคุณกำหนดสถาปัตยกรรมของแอปพลิเคชันของคุณ) สิ่งนี้แตกต่างจากการทำเพียงอย่างเดียวinclude '../../index.php'
ซึ่งจะรวมถึงสคริปต์การดำเนินการ (หรือที่เรียกว่า "การโทร") และจากนั้นไปยังไดเร็กทอรีการทำงานปัจจุบันซึ่งจะชี้ไปที่สคริปต์หลักที่มีสคริปต์ของคุณแทนที่จะแก้ไขจากพา ธ ของสคริปต์ .
จากเอกสาร PHP:
ไฟล์ถูกรวมตามพา ธ ไฟล์ที่กำหนดหรือหากไม่มีการระบุจะระบุ include_path หากไม่พบไฟล์ใน include_path สุดท้าย include จะตรวจสอบในไดเร็กทอรีของสคริปต์การโทรและไดเร็กทอรีการทำงานปัจจุบันก่อนที่จะล้มเหลว
และโพสต์ที่เก่าแก่ที่สุดที่ฉันได้พบอ้างเคล็ดลับนี้วันที่กลับไปปี 2003 โดย Tapken
คุณสามารถทดสอบด้วยการตั้งค่าต่อไปนี้:
สร้างเค้าโครงดังนี้:
htdocs
¦ parent.php
¦ goal.php
¦
+---sub
¦ included.php
¦ goal.php
ในparent.php
ใส่:
<?php
include dirname(__FILE__).'/sub/included.php';
?>
ในsub/included.php
ใส่:
<?php
print("WRONG : " . realpath('goal.php'));
print("GOOD : " . realpath(dirname(__FILE__).'/goal.php'));
?>
ผลลัพธ์เมื่อเข้าถึงparent.php
:
WRONG : X:\htdocs\goal.php
GOOD : X:\htdocs\sub\goal.php
อย่างที่เราเห็นในกรณีแรกเส้นทางจะได้รับการแก้ไขจากสคริปต์การโทรparent.php
ในขณะที่ใช้dirname(__FILE__).'/path'
เคล็ดลับการรวมจะทำจากสคริปต์included.php
ที่วางโค้ดไว้
ระวังสิ่งต่อไปนี้ไม่เทียบเท่ากับเคล็ดลับข้างต้นตรงกันข้ามกับสิ่งที่สามารถอ่านได้จากที่อื่น:
include '/../../index.php';
อันที่จริงการเติมเงินล่วงหน้า/
จะใช้งานได้ แต่จะแก้ไขได้เช่นเดียวinclude ../../index.php
กับสคริปต์การโทร (ความแตกต่างคือinclude_path
จะไม่ถูกมองในภายหลังหากล้มเหลว) จาก PHP doc :
หากมีการกำหนดเส้นทาง - ไม่ว่าจะเป็นค่าสัมบูรณ์ (เริ่มต้นด้วยอักษรระบุไดรฟ์หรือ \ บน Windows หรือ / บนระบบ Unix / Linux) หรือสัมพันธ์กับไดเร็กทอรีปัจจุบัน (เริ่มต้นด้วย.