إعداد PHP تضمين المسار على أساس كل موقع؟

StackOverflow https://stackoverflow.com/questions/24622

  •  09-06-2019
  •  | 
  •  

سؤال

يمكنني تعيين مسار تضمين PHP في ملف php.ini:

include_path = /path/to/site/includes/

ولكن بعد ذلك تتأثر مواقع الويب الأخرى، وهذا ليس جيدًا.

يمكنني ضبط PHP لتضمينه في بداية كل ملف:

$path = '/path/to/site/includes/';
set_include_path(get_include_path() . PATH_SEPARATOR . $path);

لكن هذا يبدو وكأنه ممارسة سيئة ويسبب فوضى في الأمور.

لذا يمكنني تضمين ذلك ثم تضمينه في كل ملف:

include 'includes/config.php';

أو

include '../includes/config.php';

وهذا ما أفعله الآن، ولكن مسار التضمين config.php سوف تتغير اعتمادا على ما هو بما في ذلك.

هل هناك طريقة أفضل؟هل يهم؟

هل كانت مفيدة؟

المحلول

إذا كنت تستخدم Apache كخادم ويب، فيمكنك تجاوز الإعدادات (إذا سمحت بذلك) باستخدام .htaccess ملفات.يرى دليل PHP للتفاصيل.

في الأساس قمت بوضع ملف يسمى .htaccess في جذر موقع الويب الخاص بك، والذي يحتوي على بعض PHP ini قيم.بشرط أن تقوم بتكوين Apache للسماح بالتجاوزات، سيستخدم هذا الموقع جميع القيم في تكوين PHP الخاص بك، + القيم التي تحددها في .htaccess ملف.

يمكن استخدامه فقط مع PHP_INI_ALL و PHP_INI_PERDIR اكتب التوجيهات

كما هو مذكور في الصفحة التي قمت بربطها.إذا نقرت للوصول إلى القائمة الكاملة، فسترى أن مسار التضمين هو a PHP_INI_ALL التوجيه.

نصائح أخرى

أعطى إريك فان براكيل، IMHO، واحدة من أفضل الإجابات.

علاوة على ذلك، إذا كنت تستخدم مضيفي Apache وVirtual، فيمكنك إعداد التضمينات مباشرة فيهما.باستخدام هذه الطريقة، لن تضطر إلى تذكر ترك أوامر php_admin في ملف htaccess الخاص بك.

إستخدم php.ini الملف في الموقع جذر, ، إذا كان الإعداد الخاص بك يستخدم بي أتش بي مثل CGI (الحالة الأكثر شيوعًا على المضيفين المشتركين) بنفس بناء الجملة الموجود على مستوى الخادم php.ini;وضعه في .htaccess إذا كان لديك PHP كوحدة Apache (قم بإجراء phpinfo() إذا لم تكن متأكدا):

php_value include_path "wherever"

لاحظ أن لكل مجلد php.ini does لا يؤثر المجلدات الفرعية.

لماذا تعتقد أن الإلحاق بتضمين المسار يعد ممارسة سيئة؟

لا ينبغي أن يكون هذا الرمز الموجود بالقرب من الجزء العلوي من البرنامج النصي الجذري بهذا السوء ...

$path = '/path/to/site/includes/';
set_include_path($path . PATH_SEPARATOR . get_include_path());

الميزة الرئيسية لـ IMHO هي أنه محمول ومتوافق ليس فقط مع Apache

يحرر:لقد رأيت عيب هذه الطريقة:تأثير صغير على الأداءيرى http://www.geeksengine.com/article/php-include-path.html

اعتمادًا على كيفية إعداد المضيف الخاص بك، قد يُسمح لك بوضع ملف php.ini الملف في جذر الدليل الرئيسي الخاص بك مع توجيهات التكوين الإضافية.

يجب أن يحتوي تطبيقك على ملف تكوين مكتوب بلغة PHP.ثم قم بتضمين ذلك مع صفحة نسبية في كل صفحة في البرنامج.سيحتوي ملف التكوين هذا على متغير للمسار المتضمن dir، وtemplates dir، وimages dir، وما إلى ذلك.

يمكنك ضبط include_path في ملف php.ini الخاص بك أيضًا.أنا رجل بيرل، لذلك أتوقع أن أكون قادرًا على تحميل التضمينات والحصول عليها include إفعل الصواب.لدي كل ما عندي من تضمينات في دليل محدد، والذي يتم إضافته إلى include_path.أستطيع أن أفعل أشياء مثل

require_once "ClassName.php";

لا داعي للقلق بشأن المسارات أو مواقع الملفات النسبية.

لقد كتبت أيضا بلدي CustomRequire لفعل أشياء مثل

function CustomRequire ($file) {
    if(defined('MYINCLUDEPATH')) {
        require_once MYINCLUDEPATH . "/$file";
    } else {
        require_once $file;
    }
}

وبهذه الطريقة يمكنني تغيير الطريقة التي أقوم بها في وقت لاحق.بالطبع، لا تزال بحاجة إلى إيجاد طريقة لتضمين رمز التضمين الخاص بك :)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top