1

Я разрабатываю проект, в который я не могу включить файлы.Включая файл конфигурации в PHP

Моя структура папок:

--Myproject 
-----Config 
----------config.php 
-----Includes 
----------Images 
---------------image.jpg 
----------CSS 
---------------test.css 
----------JS 
---------------test.js 
-----Modules 
----------Home 
---------------index.php 
----------Contact 
----------MyPage 

enter image description here

Я пытаюсь получить доступ к файлу конфигурации, который находится внутри Config/config.php в моем Модули/Главная/index.php

Но я не могу включить файл конфигурации?

Я пробовал:

1. 
define("ROOT", __DIR__ ."/"); 

2. 
define("HTTP", ($_SERVER["HTTP_HOST"] == "localhost") 
    ? "http://localhost/myproject/" 
    : "http://your_site_name.com/" 
); 
<img src="<?php print HTTP; ?>images/banner.gif"> 

3. 
define('PROJECT_ROOT', getcwd()); 

4. 
$_SERVER['DOCUMENT_ROOT']; 

Ref: [link][2] 

5. 
echo $_SERVER['SERVER_NAME']; 

Как нравится config.php, который находится вне стороны структуры папок, но внутри моего проекта?

+1

При создании строк пути к файлу всегда следует использовать встроенный постоянный DIRECTORY_SEPARATOR PHP. –

+1

Как только файл будет связан, я буду использовать всевозможные встроенные функции. – TomPHP

ответ

1

Вы можете использовать absolute path, которые могут быть /Myproject/Config/config.php или сбросить каталог, перейдя в папку верхнего уровня, а затем собирается ваш требуйте файлу ../../Config/config.php

Таким образом, вы можете управлять, чтобы включить с

include('../../Config/config.php'); 

As заявил в includedocumentation

If a path is defined — whether absolute (starting with a drive letter or \ on Windows, or/on Unix/Linux systems) or relative to the current directory (starting with . or ..) — the include_path will be ignored altogether. For example, if a filename begins with ../, the parser will look in the parent directory to find the requested file.

Отредактировано

Давайте проанализируем путь. Мы фактически находимся в папке Modules/Home/. te достигнет корневого уровня и может попасть внутрь папки Config, нам нужно идти на два уровня сверху, и мы можем сделать это, выполнив ../ для каждого уровня, поэтому в нашем случае ../../. Теперь, когда мы находимся в каталоге root, мы можем перемещаться по Config/ и получить нужный вам файл config.php. Теперь смешение всех тогов будет иметь ../../Config/config.php.

+2

когда я использую include ('../../ Config/config.php'); Я получаю следующую ошибку. Предупреждение: include (../../ Confg/config.php) [function.include]: не удалось открыть поток: нет такого файла или каталога в E: \ wamp \ www \ myproject \ Modules \ Главная \ index.php в строке 2 – TomPHP

+2

Если я сброшу каталог, он станет сложным, так как мне нужно предоставить конфигурацию для каждого модуля :( – TomPHP

+2

@Tomphp, включая способ, который я показал здесь, не сбросит ваш каталог, вы будете в в том же каталоге, что и раньше, вы просто включите файл – Fabio

1

я думаю, что это будет работать:

include '../../Config/config.php'; 
+2

no error: Warning: include (../../ Config/config.php) [function.include]: не удалось открыть поток: нет такого файла или в E: \ wamp \ www \ myproject \ Modules \ Home \ index.php в строке – TomPHP

1

Что вы могли сделать, включают в себя следующие строки в ваш index.php путь:

define("LOCAL_PATH_MODULES", dirname(__DIR__)); 
define("LOCAL_PATH_APP", dirname(LOCAL_PATH_MODULES)); 
define("LOCAL_PATH_CONFIG", MODULES_PATH . DIRECTORY_SEPARATOR . 'config'); 
require LOCAL_PATH_CONFIG . DIRECTORY_SEPARATOR . 'config.php'; 

Что вы должны do, помещается файл с именем bootstrap.php в папку Modules.

Вместо кода, приведенного выше, добавьте следующий код в индексный файл.

define("LOCAL_PATH_BOOTSTRAP", dirname(__DIR__)); 
require dirname(__DIR__) . 'bootstrap.php'; 

Теперь добавьте в ваш файл начальной загрузки:

// ----------------------------------------------------------------------- 
// DEFINE SEPERATOR ALIASES 
// ----------------------------------------------------------------------- 
define("URL_SEPARATOR", '/'); 
define("DS", DIRECTORY_SEPARATOR); 
define("PS", PATH_SEPARATOR); 
define("US", URL_SEPARATOR); 

// ----------------------------------------------------------------------- 
// DEFINE ROOT PATHS 
// ----------------------------------------------------------------------- 
define("RELATIVE_PATH_ROOT", ''); 
define("LOCAL_PATH_ROOT", $_SERVER["DOCUMENT_ROOT"]); 
define("HTTP_PATH_ROOT", 
     isset($_SERVER["HTTP_HOST"]) ? 
     $_SERVER["HTTP_HOST"] : (
     isset($_SERVER["SERVER_NAME"]) ? 
     $_SERVER["SERVER_NAME"] : '_UNKNOWN_')); 

// ----------------------------------------------------------------------- 
// DEFINE RELATIVE PATHS 
// ----------------------------------------------------------------------- 
define("RELATIVE_PATH_APP", dirname(LOCAL_PATH_BOOTSTRAP)); 
define("RELATIVE_PATH_LIBRARY", RELATIVE_PATH_APP . DS . 'Lib'); 
define("RELATIVE_PATH_ADMIN", RELATIVE_PATH_APP . DS . 'Admin'); 
define("RELATIVE_PATH_CONFIG", RELATIVE_PATH_APP . DS . 'Config'); 
define("RELATIVE_PATH_MODULES", RELATIVE_PATH_APP . DS . 'Modules'); 
define("RELATIVE_PATH_ASSET", RELATIVE_PATH_APP . DS . 'Includes'); 
define("RELATIVE_PATH_ASSET_IMG", RELATIVE_PATH_ASSET . DS . 'Images'); 
define("RELATIVE_PATH_ASSET_CSS", RELATIVE_PATH_ASSET . DS . 'CSS'); 
define("RELATIVE_PATH_ASSET_JS", RELATIVE_PATH_ASSET . DS . 'JS'); 

// ----------------------------------------------------------------------- 
// DEFINE LOCAL PATHS 
// ----------------------------------------------------------------------- 
define("LOCAL_PATH_APP", LOCAL_PATH_ROOT . RELATIVE_PATH_APP); 
define("LOCAL_PATH_LIBRARY", LOCAL_PATH_ROOT . RELATIVE_PATH_LIBRARY); 
define("LOCAL_PATH_ADMIN", LOCAL_PATH_ROOT . RELATIVE_PATH_ADMIN); 
define("LOCAL_PATH_CONFIG", LOCAL_PATH_ROOT . RELATIVE_PATH_CONFIG); 
define("LOCAL_PATH_MODULES", LOCAL_PATH_ROOT . RELATIVE_PATH_MODULES); 
define("LOCAL_PATH_ASSET", LOCAL_PATH_ROOT . RELATIVE_PATH_ASSET); 
define("LOCAL_PATH_ASSET_IMG", LOCAL_PATH_ROOT . RELATIVE_PATH_ASSET_IMG); 
define("LOCAL_PATH_ASSET_CSS", LOCAL_PATH_ROOT . RELATIVE_PATH_ASSET_CSS); 
define("LOCAL_PATH_ASSET_JS", LOCAL_PATH_ROOT . RELATIVE_PATH_ASSET_JS); 

// ----------------------------------------------------------------------- 
// DEFINE URL PATHS 
// ----------------------------------------------------------------------- 

define("HTTP_PATH_APP", HTTP_PATH_ROOT . RELATIVE_PATH_APP); 
define("HTTP_PATH_LIBRARY", false); 
define("HTTP_PATH_ADMIN", false); 
define("HTTP_PATH_CONFIG", false); 
define("HTTP_PATH_MODULES", false); 
define("HTTP_PATH_ASSET", HTTP_PATH_ROOT . RELATIVE_PATH_ASSET); 
define("HTTP_PATH_ASSET_IMG", HTTP_PATH_ROOT . RELATIVE_PATH_ASSET_IMG); 
define("HTTP_PATH_ASSET_CSS", HTTP_PATH_ROOT . RELATIVE_PATH_ASSET_CSS); 
define("HTTP_PATH_ASSET_JS", HTTP_PATH_ROOT . RELATIVE_PATH_ASSET_JS); 

Теперь у вас есть постоянный для локального и HTTP варианта наиболее важных путей в вашем приложении.

См. the PHP PowerTools Boilerplate для демонстрации этой техники самонаведения.

Смежные вопросы