Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

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

предположим, что вы пишете SO-клоун;) со страницами "вопросы", "теги", "пользователи" и т.д. На каждой странице вам нужны некоторые общие файлы php (db, session) + общие элементы html (header, footer). Популярный подход состоит в том, чтобы иметь кучу 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

Ответ 2

Поместите путь, содержащий config.php в php include path, а затем вы можете просто сделать это:

include 'config.php';

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

require_once 'config.php';

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

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

Ответ 3

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

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

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

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

include BASE_DIR . 'config.php';

Ответ 4

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

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

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

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

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

Ответ 5

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

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

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

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