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】:

也许这不是正确的主题,也许不是正确的用法,但也许它会对某人有所帮助。当我想从绝对路径在菜单中创建链接时,当我从一个目录跳转到另一个目录并且路径不断变化时,我想修复到基本目录。

因此,我没有使用 '../' 进入子文件夹(因为我不知道很多我需要进入 ../../../),而是将链接写为 &lt;a href='/first_dir/second_dir/third_dir//..'&gt;,类似它也适用于&lt;img src='/first_dir/second_dir//../logo.svg'&gt;。 不幸的是,这不适用于require_once()。 PHP 7

【讨论】:

【参考方案6】:

你为什么不使用 (../)

require('../folder/file.php');

【讨论】:

因为您的解决方案是错误的(您不能以这种方式使用require;请阅读其他答案并了解其正确用法),此外,这个问题是 4 年前提出的并且得到了很多更好更全面的答案?请在回答这里之前确保您正确了解整个情况;什么意思:理解问题+知道如何解决它+理解其他答案已经提供了什么。此外,回答这么老的问题(用公认的答案)很少是一个好主意。

以上是关于PHP需要来自***目录的文件的主要内容,如果未能解决你的问题,请参考以下文章

包括来自父目录或其他目录的文件

在nginx中提供来自不同位置的php文件

来自阿里云的PHP实现的防止跨站和xss攻击代码,测试有用

PHP包含来自根文件夹中不同子目录的文件

php在操作断点续传时文件如何分割合并

来自不同目录问题的 PHP ZipArchive::AddFile