Динамическое включение PHP на основе текущего пути к файлу - PullRequest
11 голосов
/ 11 апреля 2010

Я хочу найти метод для включения некоторых файлов на основе текущего пути к файлу .. например:

У меня есть «website.com/templates/name1/index.php», этот «index.php» должен быть уникальным файлом, который я буду использовать во многих разных каталогах на разных глубинах, поэтому я хочу сделать код универсальным, чтобы Мне не нужно ничего менять внутри этого файла ..

Так что, если этот index.php находится в

" website.com / шаблоны / name1 / index.php"

чем должен включать файл, расположенный здесь:

" website.com / содержание / шаблоны / name1 / content.php"

другой пример:

" website.com / шаблоны / name2 / index.php"

чем должен включать файл, расположенный здесь:

" website.com / содержание / шаблоны / name2 / content.php"

Также я хочу перезапустить " Предупреждение: include_once () [function.include-Once]: http: // Оболочка отключена в конфигурации сервера из-за ошибки allow_url_include = 0 ". отключен и небезопасен ..

Есть ли способ достичь этого? Спасибо!

Ответы [ 4 ]

31 голосов
/ 11 апреля 2010

Я думаю, вам нужно использовать __ FILE __ (в начале и в конце имени есть два подчеркивания) и DIRECTORY_SEPARATOR константы для работы с файлами на основе текущего файла путь.

Например:

<?php
  // in this var you will get the absolute file path of the current file
  $current_file_path = dirname(__FILE__);
  // with the next line we will include the 'somefile.php'
  // which based in the upper directory to the current path
  include(dirname(__FILE__) . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . 'somefile.php');

Использование DIRECTORY_SEPARATOR константа более безопасна, чем использование "/" (или "\" ) символов, поскольку разделители каталогов Windows и * nix отличаются и ваш интерпретатор будет использовать правильное значение на разных платформах.

2 голосов
/ 24 августа 2011
<?php   
if (isset($_GET['service'])) {
    include('subContent/serviceMenu.html');
} else if (isset($_GET['business'])) {
    include('subContent/business_menu.html');
} else if (isset($_GET['info'])) {
    include('subContent/info_menu.html');
}
else {
    include('subContent/banner.html');
}
?>
<a href="http://localhost/yourpage.php?service" />
0 голосов
/ 05 августа 2011

Почему бы не сделать это простым способом:

dirname(__FILE__); //Current working directory
dirname(dirname(__FILE__)); //Get path to current working directory

И, наконец,

$include_path = $dir_path . 'file_to_include.php';
include $include_path;
0 голосов
/ 11 апреля 2010

Я бы просто сделал что-то простое, как:

$dir = str_replace('website.com/','website.com/content/',__DIR__);
include "$dir/content.php";

И ваша проблема с оберткой HTTP, похоже, не имеет к этому никакого отношения. Что ты имеешь в виду под переполнением? Вы вообще никогда не хотите делать удаленное включение.

...