Как включить config.php эффективно?

Я всегда заинтересован в более эффективных способах и изучении новых вещей. Прямо сейчас, я использую код <?php include('config.php'); ?> <?php include('config.php'); ?> в каждом файле. В зависимости от того, где файл находится в моей структуре папок, я бы <?php include('../config.php'); ?> <?php include('../config.php'); ?> или даже <?php include('../../config.php'); ?> <?php include('../../config.php'); ?> . Как я могу сделать его более эффективным? Есть ли способ просто иметь его config.php в корневом каталоге и сделать все в корневом каталоге config.php?

есть способ включить файл автоматически ( auto_prepend_file ini setting), однако самое большое улучшение, которое вы можете сделать, – отказаться от использования нескольких php-файлов и использовать index.php как единую точку входа для всего веб-сайта.

предположим, что вы пишете SO-клоун;) со страницами «вопросы», «теги», «пользователи» и т. д. На каждой странице вам нужны некоторые общие файлы php (db, session) + общие элементы html (заголовок, нижний колонтитул). Популярный подход состоит в том, чтобы иметь кучу php-файлов (questions.php, tags.php, users.php), каждый из которых включает в себя общий материал. Например, user.php будет выглядеть так:

 include 'db.php'; include 'session.php'; include 'html.header.php'; .....users-specific stuff include 'html.footer.php'; 

Это довольно утомительно (вам нужно повторить много кода) и негибким (подумайте о добавлении боковой панели ко всем страницам сайта). Мое предложение состоит в том, чтобы включать в себя «наизнанку», то есть иметь файл «common stuff», который содержит код, специфичный для страницы:

  # index.php db functions session functions html header $page = isset($_GET['page']) ? preg_replace("/\W+/", "", $_GET['page']) : "home"; include "$page.php"; html footer 

Таким образом, у вас будет одна точка входа на веб-сайт – это более гибко и лучше для отладки. Единственный недостаток заключается в том, что URL-адреса менее «хороши» (user.php vs index.php? Page = user), но это можно легко решить с помощью mod_rewrite

Поместите путь, содержащий config.php в ваш путь включения php, а затем вы можете просто сделать это:

 include 'config.php'; 

или еще лучше:

 require_once 'config.php'; 

require предпочтительнее, чем include поскольку оно вызывает ошибку вместо предупреждения, когда по какой-либо причине файл не может быть включен (например, файл не найден, ошибка разрешений и т. д.). Суффикс _once является хорошим дополнением к тому, что один и тот же файл не обязательно включается несколько раз.

Кроме того, обратите внимание, что вам не нужна скобка вокруг 'config.php' в вашем include вызове. include не является функцией в php. Это языковая конструкция. Скобки просто служат ненужной группировкой, не похожей на этот пример: $myVar = (2 + 2); ,

Вы можете создать базовую константу

 define('BASE_DIR', realpath(__FILE__)); 

Поместите это в свой index.php

Тогда вы можете сделать

 include BASE_DIR . 'config.php'; 

Различные варианты, которые можно комбинировать:

  • Сделайте определения пути в файле ресурсов, которые не будут отслеживаться в вашем исходном элементе управления. например, define ('LIB_PATH', '/ home / tchalvak / project /');

  • Укажите файл autoprepend и установите его в php.ini. например, включая глобальный, используемый список сценариев, который вы можете добавить или вычесть из «на лету».

  • В конце концов, немного обманутого путём-манипуляций, который я нашел или придумал, я забываю, что:

    require_once(substr(__FILE__, 0, (strpos(__FILE__, 'lib/')))."resources.php"); // требуется файл в определенном отношении к другому известному файлу, независимо от фактического задействованного пути и без каких-либо определений.

Вот как я могу управлять моими необходимыми (включая) файлами:

Когда я могу, я никогда не использую константы или переменные (чтобы определить абсолютный путь) в моих необходимых файлах. Я считаю, что это имеет некоторые преимущества:

  1. Мне не нужно менять константу для каждой версии веб-сайта, который я развертываю.
  2. Инструменты статического анализа, такие как PHPLint, не работают с этими типами включений.
  3. Мой редактор (Eclipse) позволяет мне перейти к нужному файлу с помощью элемента управления + нажав на нужное имя файла.
  4. Легче обмениваться файлами между проектами (без необходимости редактировать требуемые пути)

Но … для этого все требует и включает необходимость относительной. По умолчанию PHP использует текущий каталог вызываемого скрипта, чтобы установить его путь включения. Это может вызвать проблемы, когда вызываемые скрипты не находятся в одной папке. Таким образом, предложение о том, чтобы все запросы, проходящие через один скрипт, автоматически удаляли любые такие проблемы.