PHP需要顶级目录中的文件

问题描述 投票:18回答:5

我的根站点上方的目录中包含多个子域,根目录中有一个assets文件夹。例如:

/
/assets/
/forums/
/blog/

我正在尝试在根目录和子目录中的php页面上的require()文件,例如,assets / include / form.php在根目录中的index.php和index.php中都是required()论坛目录。但是,在form.php中,是另一个要求,试图获取include目录中包含的另一个文件。

我似乎找不到一种方法来在这个form.php中要求一个文件,它可以在根目录的index.php和论坛目录的index.php上工作。

有没有什么办法可以明确要求从根目录开始的文件?

php include directory require
5个回答
48
投票

有几种方法可以实现这一目标。

使用form.php的相对路径

require_once __DIR__ . '/otherfile.php';

如果您使用的是PHP 5.2或更早版本,则可以使用dirname(__FILE__)而不是__DIR__。阅读更多关于魔法常数here的信息。

使用$_SERVER['DOCUMENT_ROOT']变量

这是文档根目录的绝对路径:Windows上的/var/www/example.org/C:\wamp\www\

文档根目录是根级别文件所在的文件夹:http://example.org/index.php将位于$_SERVER['DOCUMENT_ROOT'] . '/index.php'

用法:require_once $_SERVER['DOCUMENT_ROOT'] . '/include/otherfile.php';

使用自动加载器

如果它非常简单,那么对于你的应用程序来说这可能有点过分了。

设置PHP的包含路径

您还可以设置PHP在使用require()include()时查找文件的目录。查看set_include_path() here

用法:require_once 'otherfile.php';


注意:

我看到一些答案建议在require()中使用URL。我不建议这样做,因为PHP文件在被包含之前会被解析。对于输出HTML的HTML文件或PHP脚本,这是可以的,但如果您只有一个类定义,则会得到一个空白结果。


1
投票

如果更高一级使用:

include('../header.php');

如果两个级别更高:

include('../../header.php');

更重要的是,访问:http://forums.htmlhelp.com/index.php?showtopic=2922


0
投票
  • 假设您在www.domain.com/dir1/dir2/dir3/pgm1.php中有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或者中使用它 INCLUDE有效! function rURI($p){ for($w='',$i=1;$i<(count(explode('/',$_SERVER['PHP_SELF']))-1);$i++,$w.='../');return $w.$p; } 需要rURI('dirA / inc / Xpto.php'); //来自root的路径

0
投票

你有2个解决方案。您可以使用文件的完整URL,例如,如果您的文件位于可以使用的'lib'目录中:require_once('http://www.example.com/lib/myfile.php')

要么

您可以在PHP中尝试$_SERVER['DOCUMENT_ROOT']函数,但这并不总是万无一失。


-3
投票

你为什么不用(../)

require('../folder/file.php');
© www.soinside.com 2019 - 2024. All rights reserved.