PHP动态包括基于当前文件路径

时间:2010-04-11 17:23:44

标签: php dynamic include filenames

我想找到一种基于当前文件路径包含一些文件的方法,例如:

我有“website.com/templates/name1/index.php”,这个“index.php应该是一个独特的文件,我将在不同深度的许多不同目录中使用,所以我想让代码通用所以我不需要更改此文件中的任何内容..

所以如果这个“index.php”位于

“的 website.com /templates/name1/index.php”

应该包含位于此处的文件:

“的 website.com/content /templates/name1/content.php”

另一个例子:

“的 website.com /templates/name2/index.php”

应该包含位于此处的文件:

“的 website.com/content /templates/name2/content.php”

另外我想要超出“警告:include_once()[function.include-once]:http://在服务器配置中禁用包装器allow_url_include = 0 ”有点错误..因为被禁用且不安全..

有没有办法实现这个目标? 谢谢!

4 个答案:

答案 0 :(得分:31)

我认为你需要使用 __ FILE __ (它在名称的开头和结尾有两个下划线)和 DIRECTORY_SEPARATOR 常量来处理基于文件的文件当前文件路径。

例如:

<?php
  // in this var you will get the absolute file path of the current file
  $current_file_path = dirname(__FILE__);
  // with the next line we will include the 'somefile.php'
  // which based in the upper directory to the current path
  include(dirname(__FILE__) . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . 'somefile.php');

使用 DIRECTORY_SEPARATOR 常量比使用“/”(或“\”)符号更安全,因为Windows和* nix目录分隔符是不同的,你的解释者将在不同的平台上使用适当的价值。

答案 1 :(得分:2)

<?php   
if (isset($_GET['service'])) {
    include('subContent/serviceMenu.html');
} else if (isset($_GET['business'])) {
    include('subContent/business_menu.html');
} else if (isset($_GET['info'])) {
    include('subContent/info_menu.html');
}
else {
    include('subContent/banner.html');
}
?>
<a href="http://localhost/yourpage.php?service" />

答案 2 :(得分:0)

我只是做一些简单的事情:

$dir = str_replace('website.com/','website.com/content/',__DIR__);
include "$dir/content.php";

您的HTTP包装器问题似乎与此无关。超越它是什么意思?你通常不想做远程包含。

答案 3 :(得分:-1)

为什么不以简单的方式做到:

dirname(__FILE__); //Current working directory
dirname(dirname(__FILE__)); //Get path to current working directory

最后

$include_path = $dir_path . 'file_to_include.php';
include $include_path;