为包含文件创建相对路径

时间:2014-12-21 19:40:04

标签: php

我希望使用位于名为/ template的文件夹中的标题(包括css,js和图像)和页脚文件。然后,这些文件将包含在目录中的每个文件中,例如:

/template/header.php + footer.php
/home/index.php
/products/products.php
/products/hardware/types/hardware.php
/css
/js
/images

当我使用时:

include (__DIR__ . "/../template/header.php");

包含该文件(虽然我需要更改每个文件和广告更多&#34; /../"我走的目录越远)但所有css,js和图像都被破坏了。< / p>

这是我的标题(位于header.php中,其中一个包含的文件):

<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link rel="shortcut icon" href="images/favicon.ico">
<link rel="icon" type="image/gif" href="images/favicon.ico">
<link rel="stylesheet" type="text/css" href="../css/layout.css"/>
<link rel="stylesheet" type="text/css" href="../css/slider.css"/>
<link rel='stylesheet' type='text/css' href='../css/menus.css'/>
<link rel='stylesheet' type='text/css' href='../css/forms.css'/>
<link rel="stylesheet" href="css/jquery-ui.css" type="text/css" media="all"/>
<script type="text/javascript" src="../js/jquery.js"></script>
<script type="text/javascript" src="../js/jquery.elastic.source.js"></script>
<script type="text/javascript" src="../js/control.js"></script>

<title>APEC Energy - <?php echo($PageTitle);?> </title>
</head>

我现在正在尝试使用配置文件(很难开始工作但仍然不适合我)。

config.php(放在根文件夹中)(我是否需要在数组,文件路径或目录路径中放置更多信息?如果是这样的话?):

<?php

$paths = array(
    "root" => "./",
        "controller"    => "controller",              
        "stylesheets"   => "css",
        "images"        => array(...),
        "javascript"    => array(...),

);

$projectName = "/";
function fInc($filePath){
    global $projectName;
    return '//'.$_SERVER['HTTP_HOST'].'/'.$projectName.'/'.$filePath;
}

?>

并在每个.php文件中使用:

调用包含文件im
<?php
$rootDir = $_SERVER['DOCUMENT_ROOT']."/".(explode ('/', $_SERVER['PHP_SELF'])[1]);
require_once($paths['helper']['html']."template/header.php");
?>

当我使用var_dump($ paths)时,它打印出&#34; NULL&#34;

但现在只是一个空白的屏幕?

谢谢

2 个答案:

答案 0 :(得分:0)

<强>尝试:

<?php
$basePath = dirname(__FILE__);
// Or __DIR__, since PHP 5.3.0

require_once($basePath . "relative/path/from/basePath"); 
// replace the string with your real relative path


编辑:

Q1)是的。 dirname(__FILE__)描述了文件所在目录的绝对路径。

Q2)没必要。如果您知道要包含的文件只有一级或两级,您也可以使用
对于一个级别 - include("../filename.php");
对于两个级别 - include("../../filename.php");
等等。
注意:但我仍然建议使用绝对路径。


供您参考:
PHP: Absolute vs. relative paths

答案 1 :(得分:0)

我总是在每个php的第一行包含config.php

require_once($_SERVER['DOCUMENT_ROOT']."/".(explode ('/', $_SERVER['PHP_SELF'])[1])."/config.php");

此代码应始终找到根目录,然后包含config.php文件。 请注意,您可以将此文件放在任何您想要的位置 - 它总是会找到它自己的位置。如果随后将文件移动到另一个目录,则无需进行任何更改。

然后,此配置文件定义相对于根目录的所有子目录和其他重要文件的路径:

$paths = array(
    "root" => "",
        "controller"    => "controller",              
        "stylesheets"   => "css",
        "images"        => array(
             "icons"    => "img/icons",
             "controls" => "img/controls"
             ),
        "javascript"    => array(...),
        ...
);

这个数组意味着根文件夹(你的public_html)包含目录“controller”,“stylesheets”,images“等等。图像放在”img / icons“或”img /“中控制”。

包括所有其他文件:

require_once($paths['helper']['html']."/form.php");

这非常有用,因为它允许您重新构建完整的目录布局,而您只需要更新config.php。

最后但并非最不重要的是,配置还包含如下函数:

$projectName = "YourProjectFolderName";
function fInc($filePath){
    global $projectName;
    return '//'.$_SERVER['HTTP_HOST'].'/'.$projectName.'/'.$filePath;
}

它可用于转换将插入HTML文档的路径。

修改 注意,定义包含所有路径的数组只是一个建议。它帮助了我的项目,因为我经常重组我的项目布局。如果您不在项目中执行此操作,则只需定义

即可
$rootDir = $_SERVER['DOCUMENT_ROOT']."/".(explode ('/', $_SERVER['PHP_SELF'])[1]);

然后包含

文件
require_once($rootDir . "/home/index.php");

这样,您将不再需要config.php