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