وصف المشكلة
أولاً ، دعونا نلقي نظرة على بنية الدليل لمثالنا ومحتويات هذه الملفات الثلاثة.
A.Php
<؟ phpinclude './c/d.php'
ب
<؟ phpdefine ('__ b' ، 'هذا اختبار') ؛C/D.Php
<؟ phpinclude '../b.php' ؛var_dump(__b) ؛
يشير ملف D.PhP ضمن دليل C إلى ملف B.PhP تحت الدليل العلوي. لن تواجه أي مشاكل عند تشغيل c/d.php بشكل منفصل.
ومع ذلك ، إذا كانت A.PhP تشير إلى C/D.PhP في نفس الدليل مثل B ، فستكون هناك مشكلة.
يوضح خطأ يقول أن الملف غير موجود
يفكر
المعنى العام هو أنه بعد أن يقدم A.PhP C/D.PhP في A.PhP ، include '../b.php' بالنسبة إلى A.PhP ، ولا يوجد المسار النسبي لـ A.PhP ، لذلك تنشأ هذه المشكلة.
إذا كان من الممكن الرجوع إلى ملف في أماكن متعددة ، فمن السهل جدًا أن يواجه مشكلات ، وبعد ذلك يمكننا حل هذه المشكلة بسهولة باستخدام المسارات المطلقة.
استخدم المسارات المطلقة لحل المشكلة
إذا قمنا بتغيير الملف إلى ما يلي
A.Php
<؟ phpinclude __dir __. '/../b.php' ؛ var_dump (__ b) ؛
ب
<؟ phpdefine ('__ b' ، 'هذا اختبار') ؛C/D.Php
<؟ phpinclude __dir __. '/../b.php' ؛ var_dump (__ b) ؛
يتم تغيير هذا إلى الإشارة إلى المسار المطلق للملف. __DIR__ هو ثابت سحري محدد مسبقًا موجود في PHP5.3 ، مما يشير إلى الدليل الذي يوجد فيه الملف. ثم نستخدم هذا لكتابة المسار المطلق ، والذي يمكن تنفيذه بشكل طبيعي عند تشغيل A.PhP و C/D.PhP. إذا تم استخدام dirname(__FILE__) بدلاً من __DIR___ قبل php5.3
لخص
ما سبق هو كل شيء عن مشكلة المسارات النسبية في PHP واستخدام المسارات المطلقة. آمل أن يكون من المفيد للجميع استخدام PHP وتجنب إدخال حفرة المسارات النسبية في PHP مرة أخرى.