2013-06-21 1 views
2

Мои файлы PHP в моем корневом каталоге INCLUDE header.php. Header.php INCLUDEs functions.php. Я добавляю новые страницы в подкаталог, поэтому я добавил ссылки на все мои ссылки в header.php: CSS, пункты меню и последующий INCLUDE на functions.php. CSS и пункты меню отлично работают на этой странице в подкаталоге, но функции не работают. В функциях, которые, как представляется, нуждаются в ведущих косах, нет ссылок.Функции перестают работать, когда файл включен в корневой путь (ведущая косая черта)

Требуется ли сочетание include и ведущих косых черт?

От страницы в корневом каталоге:

include('header.php'); 

От страницы в подкаталоге:

include('/header.php'); 

От header.php:

include('/functions.php'); 

И функции, больше не работает (вызывается со страниц в корневом каталоге или подкаталоге):

function show_date($array_name){ 
if (date("Y F j",strtotime($array_name["exhibit_open"])) == date("Y F 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"])); 
} 

}

+0

Используйте 'include ('./ functions.php');' для текущей папки. –

ответ

2

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

Если вы запрашиваете страницу в корневом каталоге, она запрашивает header.php в корневом каталоге, который в свою очередь будет запрашивать функции functions.php в корневом каталоге. Однако, если вы запросите из подкаталога, ../header.php будет ссылаться на header.php в корневом каталоге, но весь этот файл будет включен, а затем его php-страница в подкаталоге, которая в конечном итоге пытается включить /functions.php.Он должен будет запросить ../functions.php, но это приведет к тому, что все в корневом каталоге перестанет работать.

я предлагаю установки переменной в header.php вдоль линий $root = $_SERVER['DOCUMENT_ROOT']; Тогда все включает в header.php должен быть как include($root."/functions.php");

$_SERVER['DOCUMENT_ROOT'] поможет вам объективно URL к корню, который позволит вам чтобы убедиться, что вы ссылаетесь на правильное место независимо от того, где вы запрашиваете header.php.

+0

Я думал об этом, но некоторые из моих ссылок - простой HTML (таблицы стилей, например), и поэтому я думал, что просто добавление ведущей косой черты будет иметь тот же эффект. (Я хотел сказать /header.php вместо ../header.php и отредактировал исходное сообщение). Почему $ _SERVER ['DOCUMENT_ROOT'] предпочтительнее? – user2449986

+0

Предположим, у вас есть index.php, header.php и functions.php все в одном каталоге. Тогда у вас есть otherpage.php в подкаталоге. index.php вызывает 'include ('header.php');'. Весь код, который находится в header.php, внезапно становится частью кода index.php. Итак, index.php (not header.php) вызывает 'include ('functions.php');'. Это прекрасно, потому что functions.php находится в одном каталоге. Но если otherpage.php вызывает 'include ('../ header.php');', тогда код из header.php будет вложен в otherpage.php, а теперь otherpage.php пытается вызвать 'include ('functions.php '); ', который он не может найти. –

+0

'$ _SERVER ['DOCUMENT_ROOT']' сделает так, что в header.php вы можете вызвать 'include ($ _ SERVER ['DOCUMENT_ROOT']."/Functions.php ");', так что независимо от того, Повторяя попытку включить header.php, все функции header.php будут работать. –

4

Стандартные пути 101:

/path/somefile - ведущий / якоря этот путь структуры в корневом каталоге файловой системы, например, это эквивалент C:\path\somefile.

path/somefile - нет ведущих /. ОС будет использовать программы «текущий рабочий» каталог в качестве основы для пути, поэтому, если вы находитесь в оболочке, которая находится в /home/foo, тогда somefile будет искать в /home/foo/path/somefile.

../somefile. .. относится к каталогу PARENT текущего рабочего каталога, поэтому, если вы в /home/foo, тогда ../somefile будет искать как /home/somefile.

Обратите внимание, что вы можете иметь не пути, как бы бессмысленно

/../../../../somefile. Это будет приемлемо, но бессмысленно, поскольку вы оба закрепляете путь в корне файловой системы, а затем пытаетесь выйти из этого корня, что невозможно. Этот путь является операционным эквивалентом /somefile.

1

и 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 из-за включают.