2011-12-29 2 views
1

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

-SystemRoot 
    +Code 
    +Data_Access 
    -Public_HTML 
     +css 
     +js 
     +Templates 
    -resources 
     config.php 

Там у меня есть конфигурационный файл в каталоге ресурсов, мне нужно включить config.php в большинстве других страниц PHP в различных каталогах. Так что я должен указать путь к конфигурационный файл по-разному в разных страницах, как,

include_once '../resources/config.php'; 
include_once '../../resources/config.php'; 

Есть ли способ преодолеть это & использовать общий (относительный) путь к config.php, который может быть использован в пути к папке Eny в пределах проект?

Какова общая/лучшая практика включения классов в проекты php?

+0

Является ли ваш рабочий каталог папкой Public_HTML? Или SystemRoot? (где ваш индексный файл?) – James

+0

@James index.php находится в системном корне и других веб-страницах в Public_HTML – Nalaka526

+0

Тогда, если SystemRoom является вашим каталогом domain.com/, все, что вам нужно сделать при включении, это использовать относительный путь "/ включить/путь». Таким образом, включенный путь начинается с вашего SystemRoom. Поэтому, если ваш включенный файл находится в «SystemRoot/resources/config.php», вам просто нужно включить include_once («/ resources/config.php»); в любом файле. (другими словами, просто запустите путь с ведущим «/») – James

ответ

2

Вы могли бы маршрут все на ваш index.php

затем определить некоторые Констана. Затем Evrything, направленный в index.php, будет иметь доступ к ним.

define('SELF', pathinfo(__FILE__, PATHINFO_BASENAME)); 

define('RESOURCES', SELF . 'resources/'); 
4

Я сделал довольно много, что вы сделали в прошлом, за исключением того, что мои require() s сделаны по-разному:

require_once(str_replace('//','/',dirname(__FILE__).'/') .'../../config.php'); 

Я тогда определить другие пути, которые могут быть использованы в течение примерно так:

// DIRECTORY_SEPARATOR is a PHP pre-defined constant 
// (\ for Windows,/for Unix) 
defined('DS') ? null : define('DS', DIRECTORY_SEPARATOR); 

// Define Views URL path 
defined('VIEW_URL') ? null : define('VIEW_URL', '/application/views'); 

// Define CSS URL path 
defined('CSS_URL') ? null : define('CSS_URL', '/public/css'); 

// Define JavaScripts URL path 
defined('JS_URL') ? null : define('JS_URL', '/public/js'); 

// Define site root 
defined('SITE_ROOT') ? null : 
    define('SITE_ROOT', str_replace('//','/',dirname(__FILE__))); 

// Define App path as 'application' directory 
defined('APP_PATH') ? null : define('APP_PATH', SITE_ROOT.DS.'application'); 

// Define Includes path as 'application/includes' directory 
defined('INC_PATH') ? null : define('INC_PATH', APP_PATH.DS.'includes'); 

// Define Helpers path as 'application/helpers' directory 
defined('HELP_PATH') ? null : define('HELP_PATH', APP_PATH.DS.'helpers'); 

// Define Controllers path as 'includes/classes' directory 
defined('CTLR_PATH') ? null : define('CTLR_PATH', APP_PATH.DS.'controllers'); 

// Define Models path as 'includes/classes' directory 
defined('MOD_PATH') ? null : define('MOD_PATH', APP_PATH.DS.'models'); 

// Define Views path as 'includes/classes' directory 
defined('VIEW_PATH') ? null : define('VIEW_PATH', APP_PATH.DS.'views'); 
3

Запустите скрипт с chdir($_SERVER['DOCUMENT_ROOT']);. Оттуда все ваши include s и любые другие функции, такие как file_exists, fopen и т. Д. Будут работать из корневого каталога вашего сайта (обычно public_html).

+0

Это то, что я собирался предложить, если вы еще не работали в корневом каталоге. – James

+0

@kolink Дает 'D:/workspace', который является родительским каталогом каталога SystemRoot. Что-то не так (с моим php config)? – Nalaka526

+0

Используете ли вы сервер Windows? – James

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