Как эффективно включить config.php? - PullRequest
16 голосов
/ 11 ноября 2009

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

Ответы [ 5 ]

18 голосов
/ 11 ноября 2009

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

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

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

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

 # 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

17 голосов
/ 11 ноября 2009

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

include 'config.php';

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

require_once 'config.php';

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

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

8 голосов
/ 11 ноября 2009

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

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

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

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

include BASE_DIR . 'config.php';
2 голосов
/ 09 июня 2011

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

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

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

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

2 голосов
/ 11 ноября 2009

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

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...