PHP需要来自***目录的文件
Posted
技术标签:
【中文标题】PHP需要来自***目录的文件【英文标题】:PHP require file from top directory 【发布时间】:2011-11-29 14:36:58 【问题描述】:我有几个子域包含在我的根站点上方的自己的目录中,并且在我的根目录中有一个资产文件夹。例如:
/
/assets/
/forums/
/blog/
我正在尝试在根目录和子目录中的 php 页面上 require() 文件,例如,assets/include/form.php 在根目录和 index.php 中的 index.php 中都是 required() .php 在论坛目录中。然而,在 form.php 内部,是另一个要求,试图获取包含在包含目录中的另一个文件。
我似乎无法找到一种方法来要求此 form.php 中的文件,该文件将同时适用于根目录的 index.php 和论坛目录的 index.php。
有什么方法可以明确要求从根目录开始的文件?
【问题讨论】:
【参考方案1】:有几种方法可以实现这一点。
使用来自form.php
的相对路径
require_once __DIR__ . '/otherfile.php';
如果您使用的是 PHP 5.2 或更早版本,则可以使用 dirname(__FILE__)
代替 __DIR__
。阅读更多关于魔法常数的信息here。
使用$_SERVER['DOCUMENT_ROOT']
变量
这是文档根目录的绝对路径:/var/www/example.org/
或 Windows 上的 C:\wamp\www\
。
文档根目录是您的根级别文件所在的文件夹:http://example.org/index.php 将在 $_SERVER['DOCUMENT_ROOT'] . '/index.php'
中
用法:require_once $_SERVER['DOCUMENT_ROOT'] . '/include/otherfile.php';
使用自动加载器
如果它非常简单,这对您的应用程序来说可能有点过头了。
设置 PHP 的包含路径
您还可以设置使用require()
或include()
时PHP 查找文件的目录。查看set_include_path()
here。
用法:require_once 'otherfile.php';
注意:
我看到一些答案建议使用require()
中的 URL。我不建议这样做,因为在包含 PHP 文件之前会对其进行解析。这对于输出 html 的 HTML 文件或 PHP 脚本来说是可以的,但如果你在那里只有一个类定义,你会得到一个空白的结果。
【讨论】:
您是否对$_SERVER['DOCUMENT_ROOT']
进行任何清理/验证,以防它包含邪恶字符?
@Steve:不。这是您的应用程序运行的系统提供的变量,因此不是用户提供的。如果此变量包含“邪恶字符”,则说明您有配置问题或您的系统已被黑客入侵。这些都不是您的应用程序可以做的很多事情。【参考方案2】:
如果更高一级使用:
include('../header.php');
如果高两级:
include('../../header.php');
更多信息,请访问:http://forums.htmlhelp.com/index.php?showtopic=2922
【讨论】:
【参考方案3】: 假设你有 pgm1.php www.domain.com/dir1/dir2/dir3/pgm1.php,包括或要求 'dirA/inc/Xpto.php'。 和 www.domain.com/dirZ1/dirZ2/pgm2.php 中的另一个 pgm2.php, 其中包括或需要相同的“dirA/inc/Xpto.php”。 并且您的主机配置未授权 require/include 'http://www.domain.com/......'所以...您可以在 pgm1.php 和 pgm1.php 以及 REQUIRE 或 中使用它 包括作品!
function rURI($p)
for($w='',$i=1;$i<(count(explode('/',$_SERVER['PHP_SELF']))-1);$i++,$w.='../');return
$w.$p;
需要 rURI('dirA/inc/Xpto.php'); // 根路径
【讨论】:
【参考方案4】:您有 2 个解决方案。您可以使用文件的完整 URL,例如,如果您的文件位于“lib”目录中,您可以使用: require_once ('http://www.example.com/lib/myfile.php')
或
您可以尝试 PHP 中的 $_SERVER['DOCUMENT_ROOT']
函数,但这并不总是万无一失的。
【讨论】:
require_once ('http://www.mysite.com/lib/myfile.php')
?不,除非他启用了allow_url_fopen
一种更简单、更干净的方法是使用: 【参考方案5】:
也许这不是正确的主题,也许不是正确的用法,但也许它会对某人有所帮助。当我想从绝对路径在菜单中创建链接时,当我从一个目录跳转到另一个目录并且路径不断变化时,我想修复到基本目录。
因此,我没有使用 '../' 进入子文件夹(因为我不知道很多我需要进入 ../../../),而是将链接写为 <a href='/first_dir/second_dir/third_dir//..'>
,类似它也适用于<img src='/first_dir/second_dir//../logo.svg'>
。
不幸的是,这不适用于require_once()
。
PHP 7
【讨论】:
【参考方案6】:你为什么不使用 (../)
require('../folder/file.php');
【讨论】:
因为您的解决方案是错误的(您不能以这种方式使用require
;请阅读其他答案并了解其正确用法),此外,这个问题是 4 年前提出的并且得到了很多更好更全面的答案?请在回答这里之前确保您正确了解整个情况;什么意思:理解问题+知道如何解决它+理解其他答案已经提供了什么。此外,回答这么老的问题(用公认的答案)很少是一个好主意。以上是关于PHP需要来自***目录的文件的主要内容,如果未能解决你的问题,请参考以下文章