إعداد PHP تضمين المسار على أساس كل موقع؟
سؤال
يمكنني تعيين مسار تضمين 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;
}
}
وبهذه الطريقة يمكنني تغيير الطريقة التي أقوم بها في وقت لاحق.بالطبع، لا تزال بحاجة إلى إيجاد طريقة لتضمين رمز التضمين الخاص بك :)