根路径不适用于php include
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了根路径不适用于php include相关的知识,希望对你有一定的参考价值。
我假设根文件夹你的意思是你的web文件根目录,而不是文件系统root。
为此,你也可以
- 将web根文件夹添加到include path和
include('example/example.php')
- 或者你可以
include($_SERVER['DOCUMENT_ROOT'].'/example/example.php')
我也有这个问题。保罗迪克森的答案是正确的,但也许这将有助于你理解为什么:
这里的问题是PHP是一种服务器端语言。纯html文档可以根据您在服务器上设置的根URL访问文件(即,从您所在的任何子目录访问图像,您将使用/images/example.jpg
从顶层目录向下),PHP实际访问使用include (/images/example.jpg)
时的服务器根目录
您设置的站点结构实际上位于Apache Server中的文件系统中。我的站点root看起来像这样,从服务器根开始向下:
/home2/siteuserftp/public_html/test/
“test”代表您的站点根目录
所以回答你的问题为什么你的PHP包含没有得到你想要的结果(它完全正常工作)是因为你要求PHP代码尝试在服务器根目录找到你的文件,当它实际上是位于您网站的HTML根目录,如上所示。
您的文件将基于“test /”的站点根目录,并且看起来像这样:
/home2/site user FTP/public_HTML/test/about/index.PHP
Paul Dixon提供的答案是:
include($_SERVER['DOCUMENT_ROOT'].'/example/example.php')
正是解决问题的方法(不要担心尝试找到文档根来替换'DOCUMENT_ROOT',PHP会为你做。确保你有'DOCUMENT_ROOT'字样)
编辑:
更多信息DOCUMENT_ROOT和其他PHP SERVER变量can be found here
include()(以及许多其他函数,如require(),fopen()等)都可以在本地文件系统上工作,而不是在web根目录下工作。
所以,当你做这样的事情
include( "/example/example.php" );
您试图从* nix机器的根目录中包含。
虽然有很多方法可以接近你正在做的事情,但保罗迪克森的建议可能是你最好的选择。
每个Web服务器都有一个public_html
文件夹,您通常会在其中保存文件等。通过使用/
,您将无法访问public_html
,而是指向主(不可访问)根目录。所以,改用$_SERVER['DOCUMENT_ROOT']."/your/locati.on"
我在运行Windows和IIS的计算机上解决了这个问题,具体如下:
<?php
$docroot = 'http://www.example.com/';
include ($docroot.'inc-header.php');
?>
如果您使用的是本地开发计算机,则可以通过在C: Windows System32 drivers etc hosts中添加以下内容来强制您的域指向localhost
127.0.0.1 www.example.com
此外,您需要在php.ini中启用allow_url_include,如此
allow_url_include = On
对我来说,以下技巧奏效了。我正在使用带有IIS的Windows,因此DOCROOT是C: Inetpub wwwroot。
- 将C: Inetpub wwwroot替换为驱动器。让它成为W :( WEB内容)。
subst W: C:Inetpubwwwroot
- 以这种方式编辑php.ini:将W:附加到include_path,将doc_root更改为W:
include_path = ".;c:phpactiveincludes;W:" doc_root = W:
- 将subst命令放入Startup文件夹中的CMD文件中以自动进行映射。
现在,两个版本都允许:
include '/common/common.inc'; // access to mapped W: root include 'common/common.inc'; // access to W: within include_path
某些版本的PHP可能在文档根目录末尾有分隔符,而其他版本可能没有。作为一个实际问题,您可能想要使用:
$r = trim(filter_input(INPUT_SERVER, 'DOCUMENT_ROOT', FILTER_SANITIZE_STRING));
if (substr($r, 0, 1) == '/')
{
define("PATCH_SEPARATOR", "/");
}
else
{
define("PATCH_SEPARATOR", "\");
}
if (substr($r, -1) == PATCH_SEPARATOR)
{
include_once ($r . 'example/example.php');
}
else
{
include_once ($r . PATCH_SEPARATOR . 'example/example.php');
}
以上是关于根路径不适用于php include的主要内容,如果未能解决你的问题,请参考以下文章