我的所有PHP包含文件都在一个单独的目录中:
https://www.mywebsite.com/includes
在顶层页面中插入这些文件非常容易:
<?php include 'includes/logo.php'; ?>
<?php include 'includes/main_nav.php'; ?>
<?php include 'includes/news.php'; ?>
etc.
对于子目录页面,我一直这样做:
<?php include '../includes/logo.php'; ?>
<?php include '../includes/main_nav.php'; ?>
<?php include '../includes/news.php'; ?>
和这个:
<?php include '../../includes/logo.php'; ?>
<?php include '../../includes/main_nav.php'; ?>
<?php include '../../includes/news.php'; ?>
到目前为止一切顺利,但我怀疑这并不会一直这么容易。
现在我需要包含这个文件:
top_five_news_stories.php
在这个中:
news.php
此时,我的相对路径策略失败了,因为包含在包含中的路径结构只能有一个。
我阅读了几篇帖子,推荐使用绝对路径:
- dirname(__FILE__) - realpath(dirname(__FILE__)) - $_SERVER["DOCUMENT_ROOT"]
但是,它们都带有某种与PHP配置、服务器配置或操作系统相关的警告。换句话说,通常会有人评论说在他们的情况下不起作用,或者在IIS中不起作用,或者在UNIX中不起作用,或者其他原因。
我没有看到的解决方案是我认为最简单的:只需设置一个变量。
$base = "https://www.mywebsite.com/includes";
然后:
<?php include $base . "logo.php" ?>
考虑到我已经使用了与之类似的HTML base
元素,这种方法让我感觉简单高效。
但由于在我阅读的任何帖子中都没有提到它,所以我想知道是否忽略了潜在的问题。
坦白地说,如果我今天必须开始生产,我会使用这个:
<?php include $_SERVER['DOCUMENT_ROOT'] . '/logo.php" ?>
这对我很有用,而且常常被提到。
但我想知道使用变量是否是一种可靠、高效的方法?
include
中使用 URL。当您通过 Web 服务器访问 PHP 脚本时,它会在远程端执行它,而不是返回源代码,但include
需要源代码。 - Barmarphp.ini
中的include_path
设置。将您的包含文件放在该目录中,然后您就可以从任何脚本中访问它们了。 - Barmar