Я всегда заинтересован в более эффективных способах и изучении новых вещей. Прямо сейчас, я использую код <?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");
// требуется файл в определенном отношении к другому известному файлу, независимо от фактического задействованного пути и без каких-либо определений.
Вот как я могу управлять моими необходимыми (включая) файлами:
Когда я могу, я никогда не использую константы или переменные (чтобы определить абсолютный путь) в моих необходимых файлах. Я считаю, что это имеет некоторые преимущества:
Но … для этого все требует и включает необходимость относительной. По умолчанию PHP использует текущий каталог вызываемого скрипта, чтобы установить его путь включения. Это может вызвать проблемы, когда вызываемые скрипты не находятся в одной папке. Таким образом, предложение о том, чтобы все запросы, проходящие через один скрипт, автоматически удаляли любые такие проблемы.