我有一个header.php文件,我在我的网站的每个页面上都使用它作为包含。其中包括网站的导航链接。
注意:我不想使用绝对文件路径,因为我不知道要上传网站的服务器的文件夹结构。无论网站放在服务器的哪个位置,它都需要工作。考虑到这一点,我有两个问题:
1 )每当我加入header.php时,是否有一些PHP可以应用于文件路径的开头?我的网站将有许多子目录,每次我想要包含它时,精神上遍历网站指向它所驻留的文件夹只是太费时。
2 )如何确保header.php中的导航链接始终正确?例如返回主页的链接将是“../index.php”,如果它是下面的一个目录,但在其他任何地方都不起作用。
我非常感谢帮助,谢谢。
答案 0 :(得分:1)
首先制作一个包含路径的php文件(例如将其命名为ini.php并将其放在文件夹ini中):
defined("YOUR_BASE_PATH")
or define("YOUR_BASE_PATH", realpath(dirname(__FILE__) . '/..'));
然后在header.php中执行以下操作(包括包含路径的ini文件定义):
include_once(dirname(__FILE__) . "/ini/ini.php");
include_once(YOUR_BASE_PATH . "/nocache.php");
现在您可以轻松使用项目中的路径而无需麻烦! 相当不错的解决方案,你可以随意移动文件夹,只要你更新ini文件!
现在您已经设置了这样的内容,您可以更改所有链接以使用实际路径:
<a href="<?php echo PathToUrl(YOUR_BASE_PATH . "/index.php"); ?>">test link</a>
在header.php中为PathToUrl创建一个简单的函数:
function PathToUrl($path)
{
$path = str_replace($_SERVER['DOCUMENT_ROOT'], '', $path)
return $path;
}
应该这样做。
答案 1 :(得分:0)
使用魔法常量__DIR__
...
来自PHP的文档:
DIR 文件的目录。如果在include中使用,则返回包含文件的目录。这相当于 目录名(文件强>)。此目录名称没有尾部斜杠 除非它是根目录。
然后像这样使用它:
$ file = DIR 。 “/../ somefile.txt”;
另外,在header.php(或始终首先加载的任何其他脚本中,您可以设置常量:
const PROJECT_DIR = __DIR__ . "/..";
然后始终引用PROJECT_DIR
这个很棘手:/我认为这不可能,而且听起来也很不安全(如果你只需添加一堆..
就能访问服务器上的所有文件,例如:{ {1}}
答案 2 :(得分:0)
是的,使用PHP魔术常量。请尝试以下方法:
__DIR__
在字符串开头之前将其添加到包含链接...示例:
require __DIR__ . "/file_name.php";
您可以在此处详细了解: JSON.org