使用 require_once 的路径错误

Posted

技术标签:

【中文标题】使用 require_once 的路径错误【英文标题】:Wrong path using require_once 【发布时间】:2015-06-08 19:56:44 【问题描述】:

我在尝试使用 require_once 时遇到问题。 我指定了错误的路径,我找不到解决方案。

我有一个名为 header.php 的文件,其中包含两个使用 require_once 的文件:functions.php 和 navigation.php。 这部分工作正常。 当我尝试在位于不同目录的名为 view.php 的文件中包含 header.php 时出现问题。

这是树枝:

C:\wamp\www\1.1\plugins\docreader\php\view.php
C:\wamp\www\1.1\theme\dark-blue\templates\files\header.inc.php
C:\wamp\www\1.1\theme\dark-blue\templates\files\functions.inc.php
C:\wamp\www\1.1\theme\dark-blue\templates\files\navigation.inc.php

我尝试了很多不同的路径,但都没有成功。

请问有人知道吗?

【问题讨论】:

你只需要一点MAGIC 很高兴我的 php 日子结束了 xD 【参考方案1】:

了解(并使用)魔术常量__DIR__ 和函数dirname() 以从包含器的路径开始生成包含文件的路径。

例如,如果您想在 plugins\docreader\php\view.php 中包含 theme\dark-blue\templates\files\functions.inc.php,则使用如下内容:

// Use this in 'plugins\docreader\php\view.php'
include dirname(dirname(dirname(__DIR__))).
        '/theme/dark-blue/templates/files/functions.inc.php';

__DIR__ 是一个magic constant,计算结果为包含使用它的文件的目录。在C:\wamp\www\1.1\plugins\docreader\php\view.php中,__DIR__的值为'C:\wamp\www\1.1\plugins\docreader\php'

函数dirname() 返回所提供路径的父目录。有点像..,只会更好。使用它三次会将作为参数传递的值(上面解释的__DIR__ 的值)减少到'C:\wamp\www\1.1'。从那里开始一切都很简单:将相对路径添加到所需文件 ('/theme/dark-blue/templates/files/functions.inc.php') 并忘记包含问题。

【讨论】:

感谢您回答的提示。我尝试了你的建议,但它不起作用。我认为问题出在 header.php 本身包含另外两个文件这一事实。 header.php 是我试图包含在 view.php 中的那个。我试图在 view.php 中包含另外两个,但问题仍然存在。 注意:使用未定义的常量 SITE_TEMPLATES_PATH - 在第 3 行的 C:\wamp\www\1.1\theme\dark-blue\templates\files\header.inc.php 中假定为“SITE_TEMPLATES_PATH”警告: require_once(SITE_TEMPLATES_PATH/files/functions.inc.php):无法打开流:C:\wamp\www\1.1\theme\dark-blue\templates\files\header.inc.php 中没有这样的文件或目录3 致命错误:require_once():在 C:\wamp\www\1.1\theme\dark- 中打开所需的 'SITE_TEMPLATES_PATH/files/functions.inc.php' (include_path='.;C:\php\pear') 失败blue\templates\files\header.inc.php 在第 3 行 第 3 行是:require_once(SITE_TEMPLATES_PATH .'/files/functions.inc.php'); 我只是给你一个例子。我不知道您需要包含哪个文件以及在哪里。只需在你所有的include/require 中使用这个想法(在包含的文件中),它就会起作用。 是的,我让我的大脑工作了一点,这就是我所做的。非常感谢【参考方案2】:

你需要让你的文件路径是绝对的而不是相对的。实现此目的的一个有用的超级全局变量是$_SERVER['DOCUMENT_ROOT'],它将评估您的 Web 服务器文件根目录。

【讨论】:

以上是关于使用 require_once 的路径错误的主要内容,如果未能解决你的问题,请参考以下文章

PHP require_once 错误与相对路径

我的 require_once 路径有啥问题?

PHP require_once 在 Mac OSX Lion 中本地抛出错误

致命错误:require_once() [function.require]

require和require_once的区别

php requirerequire_once和includeinclude_once的区别