Мои PHP-файлы в моем корневом каталоге INCLUDE header.php. Header.php INCLUDEs functions.php. Я добавляю новые страницы в подкаталог, поэтому я добавил ссылки на все мои ссылки в header.php: CSS, пункты меню и последующий INCLUDE на functions.php. CSS и пункты меню отлично работают на этой странице в подкаталоге, но функции не работают. В функциях, которые, как представляется, нуждаются в ведущих косах, нет ссылок.
Использует ли комбинация include
и lead slashes модификационные функции?
На странице в корневом каталоге:
include('header.php');
На странице в подкаталоге:
include('/header.php');
Из header.php:
include('/functions.php');
И функция, которая больше не работает (вызывается со страниц в корневом каталоге или подкаталоге):
function show_date($array_name){ if (date("YF j",strtotime($array_name["exhibit_open"])) == date("YF j",strtotime($array_name["exhibit_close"]))){ echo date("F j, Y",strtotime($array_name["exhibit_open"])); } elseif (date("Y",strtotime($array_name["exhibit_open"])) != date("Y",strtotime($array_name["exhibit_close"]))) { $first_date_format = "F j, Y"; echo date($first_date_format,strtotime($array_name["exhibit_open"])). " - ". date("F j, Y",strtotime($array_name["exhibit_close"])); } elseif (date("F",strtotime($array_name["exhibit_open"])) != date("F",strtotime($array_name["exhibit_close"]))){ $first_date_format = "F j"; echo date($first_date_format,strtotime($array_name["exhibit_open"])). " - ". date("F j, Y",strtotime($array_name["exhibit_close"])); } else { $first_date_format = "j"; echo date("F j",strtotime($array_name["exhibit_open"])). " - ". date($first_date_format,strtotime($array_name["exhibit_close"])). ", ". date("Y",strtotime($array_name["exhibit_close"])); }
}
Просто вам известно, что если вы хотите, чтобы страницы php запрашивали и запрашивали другие страницы, может быть полезно использовать require_once
вместо include
. Это сделает так, чтобы ни одна из включенных страниц не повторялась, и вам не нужно беспокоиться о том, чтобы случайно включить что-то более одного раза.
При этом, когда вы запрашиваете страницу в корневом каталоге, она запрашивает header.php в корневом каталоге, который, в свою очередь, будет запрашивать функции functions.php в корневом каталоге. Однако, если вы запрашиваете из подкаталога, ../header.php
будет ссылаться на header.php в корневом каталоге, но весь этот файл будет включен, а затем его php-страница в подкаталоге, которая в конечном итоге пытается включить /functions.php
. Он должен будет запросить ../functions.php
, но это приведет к ../functions.php
, что все в корневом каталоге перестанет работать.
Я бы предложил установить переменную в header.php вдоль строк $root = $_SERVER['DOCUMENT_ROOT'];
Затем все включенные в header.php должны быть как include($root."/functions.php");
$_SERVER['DOCUMENT_ROOT']
предоставит вам объектный URL-адрес корню, который позволит вам убедиться, что вы ссылаетесь на правильное место независимо от того, откуда вы запрашиваете header.php.
Стандартные пути 101:
/path/somefile
– ведущая /
привязывает эту структуру пути к ROOT файловой системы, например, это эквивалент C:\path\somefile
.
path/somefile
– нет ведущего /
. ОС будет использовать программы «текущая работающая» директория в качестве основы для пути, поэтому, если вы находитесь в оболочке, somefile
в /home/foo
, тогда будет выполняться поиск somefile
в /home/foo/path/somefile
.
../somefile
. ..
ссылается на каталог PARENT текущего рабочего каталога, поэтому, если вы находитесь в /home/foo
, тогда ../somefile
будет искать как /home/somefile
.
Обратите внимание, что вы можете иметь нечувствительные пути, такие как
/../../../../somefile
. Это будет приемлемо, но бессмысленно, поскольку вы оба закрепляете путь в корне файловой системы, а затем пытаетесь выйти из этого корня, что невозможно. Этот путь является операционным эквивалентом /somefile
.
Include
и Require
буквально вытаскивать код в исполняемый файл, поэтому нужно следить за тем, что файлы в подкаталоге запущены из рабочего каталога.
Пример:
|-templates-|-header.php Docroot--| |-inc-|-functions.php | |-index.php
Index.php
<?php include 'template/header.php'; ... ?>
шаблон / header.php
<?php include 'inc/functions.php'; ... ?>
потому что код header.php выполняется из docroot из-за включения.