بواسطة
longnetpro
لطالما كان مسار التضمين في PERL وPHP مشكلة صعبة، ويتعلق بشكل أساسي بنظام التشغيل وخادم الويب، ومن المستحيل حل مشكلة المسار هذه بذكاء شديد. بالمقارنة مع PERL، فإن مسار PHP أفضل بكثير وأسهل بكثير في الحل، لأن المسار النسبي لـ PHP يمكن استخدامه في أي مناسبة في برنامج PHP، على عكس PERL حيث يجب استخدام المسارات المطلقة في عبارات معينة، مما يؤدي إلى عملية زرع معقدة للغاية .
بناءً على ذلك، في PHP، قمت بتصميم حل قوي تمامًا، كما هو موضح أدناه.
مبدئيا:
استخدم المسارات النسبية، ولكن استخدم المسارات المطلقة ضمن المسارات النسبية (معقدة بعض الشيء، وسيتم شرحها بالتفصيل لاحقًا). للتوسع.
الخطوات التفصيلية:
1. حدد أولاً الدليل الجذر للبرنامج، ولاحظ أنه موجود ضمن نظام الملفات، وليس الدليل الظاهري ضمن خادم الويب، ومع ذلك، فإن المسار النسبي للدليل الفرعي ضمن الدليل هو نفس الدليل الفرعي الظاهري ضمن عنوان URL.
2. أنشئ ملف settings.php في كل دليل فرعي ضمن الدليل الجذري للبرنامج المحدد (في الواقع ليس بالضرورة كل واحد، حسب الحاجة)، وحدد متغيرًا أو ثابتًا فيه (الثوابت أفضل لأن النطاق أكبر)، مثل APPROOT، ولكن هذا APPROOT ليس مسارًا مطلقًا، ولكنه مسار نسبي للدليل بالنسبة إلى الدليل الجذر للبرنامج الذي حددته.
3. اكتب require_once('settings.php'); في الجملة الأولى من جميع ملفات إدخال البرنامج في هذا الدليل (أي الملف الأول الذي يحتوي على ملفات أخرى، أو الملفات التي تسمح بالتصفح المباشر في المتصفح)، ولكن من فضلك لاحظ أنه من الأفضل عدم إضافة هذه الجملة إلى جميع الملفات المضمنة - في الواقع، لا بأس بإضافتها، لأنه يمكنك الكتابة if(!defense(APPROOT)) Define(APPROOT, '../. .'); هذا النوع من العبارات يمنع إعادة التعريف.
4. إذا كنت تريد تضمين ملفات أخرى، سواء بشكل مباشر أو غير مباشر، يمكنك كتابة include(APPROOT.$path);, حيث $path هو المسار المطلق للملف المضمن نسبة إلى الدليل الجذر للبرنامج الذي تحدده.
مبدأ:
الدليل الجذر للبرنامج المحدد هو مسار نسبي، لكن موقع الدليل المحدد هو مسار مطلق بالنسبة إلى الدليل الجذر هذا، والجمع بين الاثنين هو المسار النسبي للملف المحدد بالنسبة إلى الدليل الجذر للبرنامج. على سبيل المثال، الدليل c:wwwrootapp هو الدليل الجذر للبرنامج الذي حددته، ثم هناك ملفان c:wwwrootappaindex.php وc:wwwrootappbinc.php . بالنسبة للدليل الفرعي a، يكون APPROOT هو '..'، وبالنسبة للدليل الجذر للبرنامج، فإن المسار المطلق لـ inc.php هو $path='/b/inc.php'، والجمع بين الاثنين هو '../b /inc.php'. إذا كنت تريد تضمين inc.php في ملف Index.php، فيجب عليك كتابة include('../b/inc.php');، أليس هذا المسار مجرد مسار APPROOT.$ الذي تم دمجه للتو؟
ختاماً:
بعد المعالجة المذكورة أعلاه، أصبح كل مسار أنيقًا وموحدًا تمامًا. الشيء الوحيد المرهق بعض الشيء هو أنه يجب تعريف APPROOT في كل دليل، ولكن يجب تحديده مرة واحدة فقط في ملف settings.php الخاص بهذا الدليل في كل دليل. دليل. إذا كان برنامجك بأكمله يحتوي على ملف إدخال واحد فقط، مثل ملف Index.php، وتم تضمين جميع الملفات الأخرى بشكل مباشر أو غير مباشر في ملف الإدخال هذا فقط، فأنت بحاجة فقط إلى إضافة settings.php في الدليل الذي يوجد به ملف تعريف ملف Index.php مرة واحدة، وانها على ما يرام. إذا قام أحد الأصدقاء بمشروع دلفي ودرس ملفات المشروع، سيجد أن الوضع الذي ذكرته للتو وهو أن البرنامج يحتوي على ملف إدخال رئيسي واحد فقط يشبه إلى حد كبير مشروع دلفي، لأن دلفي لديها ملف برنامج رئيسي واحد فقط (dpr) file) والباقي عبارة عن ملفات وحدة أو ملفات موارد، ولا يمكن تنفيذها بشكل مستقل. في PHP، إذا حدث هذا الموقف، فأنت بحاجة فقط إلى تحديد APPROOT مرة واحدة، وكتابة require_once('settings.php'); في الجملة الأولى من ملف البرنامج الرئيسي، ويمكن استخدام جميع التضمينات اللاحقة include(APPROOT.$ path) ؛، فمن المؤكد أنه لن تكون هناك أية مشكلات، إلا إذا لم تكتب هذا "يتضمن المسار المطلق للملف بالنسبة إلى الدليل الجذر للبرنامج" $path.
لقد استخدمت هذه الطريقة أكثر من مرة وكانت النتائج جيدة. بالإضافة إلى ذلك، يمكنك أيضًا الرجوع إلى طريقة تعريف المسار في WEB-INFO الخاص بـ JSP.
هذه خطة نموذجية تظل دون تغيير استجابة للتغيرات المتغيرة باستمرار. إذا كان لدى أي شخص خطة أفضل، فلا تتردد في مناقشتها! إذا كان هناك أي شيء لم تفهمه، فلا تتردد في السؤال.