当根文件中包含文件时,函数停止工作(前导斜杠)

时间:2013-06-21 16:03:30

标签: php function include

我的根目录中的PHP文件INCLUDE 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"]));
}

}

3 个答案:

答案 0 :(得分:4)

标准路径101:

/path/somefile - 领先的/在文件系统的ROOT处锚定此路径结构,例如它相当于C:\path\somefile

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

../somefile..引用当前工作目录的PARENT目录,因此,如果您在/home/foo,则会../somefile搜索/home/somefile

请注意,您可以拥有非感性路径,例如

/../../../../somefile。这是可以接受的,但是没有意义,因为你们都将路径锚定在文件系统的根目录,然后尝试去掉根目录,这是不可能的。此路径的操作等效于/somefile

答案 1 :(得分:2)

正如您所知,如果您要请求自己请求其他页面的php页面,使用require_once代替include可能会有所帮助。这将使得所有包含的页面都不会重复,并且您不必担心不小心包含不止一次的内容。

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

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

include($root."/functions.php");会为您提供根目录的客观网址,无论您在何处请求header.php,都可以确保您引用正确的位置。

答案 2 :(得分:1)

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

示例:

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

的index.php

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

模板/ header.php文件

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

因为include.< / p>正在从docroot执行header.php代码