วิธีง่ายๆในการมีพา ธ สัมบูรณ์ของสคริปต์ที่เรียกใช้ครั้งแรกในสคริปต์นั้นและสคริปต์อื่น ๆ ที่รวมอยู่include
ในrequire
นั้นrequire_once
คือการใช้ค่าคงที่และเก็บเส้นทางสคริปต์ปัจจุบันไว้ที่จุดเริ่มต้นของสคริปต์หลัก :
define( 'SCRIPT_ROOT', __FILE__ );
วิธีการแก้ปัญหาข้างต้นเหมาะสมเมื่อมีสคริปต์ "หลัก" เดียวที่เป็นสคริปต์include
อื่น ๆ ที่จำเป็นเช่นเดียวกับในเว็บแอปพลิเคชันส่วนใหญ่
หากไม่ใช่กรณีนี้และอาจมี "สคริปต์ในช่อง" หลายรายการเพื่อหลีกเลี่ยงการกำหนดใหม่และเพื่อให้มีเส้นทางที่ถูกต้องเก็บไว้ในค่าคงที่แต่ละสคริปต์อาจเริ่มต้นด้วย:
if( ! defined( 'SCRIPT_ROOT' ) ) {
define( 'SCRIPT_ROOT`, __FILE__ );
}
หมายเหตุเกี่ยวกับคำตอบที่ยอมรับ (ปัจจุบัน) :
คำตอบระบุว่าเส้นทางสคริปต์ที่ดำเนินการครั้งแรกเป็นองค์ประกอบแรกของอาร์เรย์ที่ส่งกลับโดย get_included_files()
คำตอบที่ระบุว่าเส้นทางสคริปต์ดำเนินการในขั้นต้นเป็นองค์ประกอบแรกของอาร์เรย์ที่ส่งกลับโดย
นี้เป็นทางออกที่ฉลาดและเรียบง่ายและ -At เวลาของการ writing- (เรากำลังเกือบ PHP 7.4.0) มันไม่ทำงาน
อย่างไรก็ตามโดยการดูที่เอกสารจะไม่มีการกล่าวถึงว่าสคริปต์ที่เรียกใช้ครั้งแรกนั้นเป็นรายการแรกของอาร์เรย์ที่ส่งคืนโดยget_included_files()
รายการของอาร์เรย์ที่ส่งกลับโดย
เราอ่านเท่านั้น
สคริปต์ที่ แต่เดิมเรียกว่าถือเป็น "ไฟล์ที่รวมอยู่" ดังนั้นมันจะถูกแสดงพร้อมกับไฟล์ที่อ้างอิงโดยรวมและตระกูล
ในช่วงเวลาของการเขียน " สคริปต์เดิมเรียกว่า " เป็นคนแรกในอาร์เรย์ แต่ - ทางเทคนิค - ไม่มีการรับประกันว่าสิ่งนี้จะไม่เปลี่ยนแปลงในอนาคต
เกี่ยวกับการจดบันทึกrealpath()
, __FILE__
และ__DIR__
:
อื่น ๆ มีข้อเสนอแนะในคำตอบของพวกเขาใช้__FILE__
, __DIR__
, dirname(__FILE__)
, realpath(__DIR__)
...
dirname(__FILE__)
จะมีค่าเท่ากับ__DIR__
(แนะนำใน PHP 5.3.0) __DIR__
ใช้เพียงเพื่อ
ทั้งสอง__FILE__
และ__DIR__
เป็นเส้นทางที่แน่นอนเสมอดังนั้นจึงrealpath()
ไม่จำเป็น