2

我的根目录中的 PHP 文件包括 header.php。Header.php 包括 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"]));
}

}

4

3 回答 3

4

标准路径 101:

/path/somefile- 前导/将此路径结构锚定在文件系统的根目录,例如,它相当于C:\path\somefile.

path/somefile- 没有领先/。操作系统将使用程序“当前工作”目录作为路径的基础,因此如果您在位于 in 的 shell 中/home/foo,则将somefile在 in 中搜索/home/foo/path/somefile

../somefile. the..指的是当前工作目录的 PARENT 目录,所以如果你在/home/foo, then../somefile将被搜索为/home/somefile.

请注意,您可以使用无意义的路径,例如

/../../../../somefile. 这是可以接受的,但毫无意义,因为你们都将路径锚定在文件系统的根目录,然后尝试超越根目录,这是不可能的。这条路径在操作上等同于/somefile.

于 2013-06-21T16:11:00.053 回答
2

请注意,如果您要让您请求的 php 页面本身也请求其他页面,那么使用require_once而不是include. 这样一来,所包含的所有页面都不会重复,您不必担心不小心包含了不止一次的内容。

话虽这么说...当您在根目录中请求页面时,它将请求根目录中的 header.php ,而根目录中的 header.php 将依次请求根目录中的 functions.php。但是,如果您从子目录请求,../header.php将引用根目录中的 header.php ,但整个文件将被包含在内,然后子目录中的 php 页面最终会尝试包含/functions.php. 它需要 request ../functions.php,但这会导致根目录中的所有内容停止工作。

我建议在 header.php 中设置一个变量,$root = $_SERVER['DOCUMENT_ROOT']; 然后,header.php 中的所有包含应该像include($root."/functions.php");

$_SERVER['DOCUMENT_ROOT']将为您提供指向根目录的客观 url,这将使您能够确保无论您从何处请求 header.php,您都引用了正确的位置。

于 2013-06-21T16:12:01.680 回答
1

IncludeRequire从字面上将代码拉入执行文件,所以要注意的一件事是子目录中的文件是从工作目录运行的。

例子:

         |-templates-|-header.php
Docroot--|
         |-inc-|-functions.php
         |
         |-index.php

索引.php

<?php
include 'template/header.php';
...
?>

模板/header.php

<?php
include 'inc/functions.php';
...
?>

因为由于包含,header.php 代码正在从 docroot 执行。

于 2013-06-21T16:12:27.017 回答