PHP Dynamic включает в себя текущий путь к файлу

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

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

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

" website.com/templates/name1/index.php"

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

" website.com/content/templates/name1/content.php"

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

" website.com/templates/name2/index.php"

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

" website.com/content/templates/name2/content.php"

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

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

Ответ 1

Я думаю, вам нужно использовать __ 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

<?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" />

Ответ 3

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

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

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

Ответ 4

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

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;