/在链接的开头,到达根文件夹在php include中不起作用。
例如“/example/example.php”
解决方案是什么?
答案 0 :(得分:56)
我假设根文件夹是指您的Web文档根目录,而不是文件系统根目录。
为此,你可以
include('example/example.php')
include($_SERVER['DOCUMENT_ROOT'].'/example/example.php')
答案 1 :(得分:28)
我也有这个问题。保罗迪克森的答案是正确的,但也许这将有助于你理解为什么:
这里的问题是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/siteuserftp/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
答案 2 :(得分:5)
include()(以及许多其他函数,如require(),fopen()等)都可以在本地文件系统上工作,而不是Web根目录。
所以,当你做这样的事情时
include( "/example/example.php" );
您正试图从* nix机器的根目录中添加。
虽然有很多方法可以解决你正在做的事情,但保罗迪克森的建议可能是你最好的选择。
答案 3 :(得分:4)
每个网络服务器都有一个public_html
文件夹,您通常会在其中保留文件等。使用/
,您将无法访问public_html
,而是指向主要网站(根本不可取的。因此,请改用$_SERVER['DOCUMENT_ROOT']."/your/locati.on"
答案 4 :(得分:2)
我在运行Windows和IIS的计算机上使用以下内容解决了这个问题:
<?php
$docroot = 'http://www.example.com/';
include ($docroot.'inc-header.php');
?>
如果您使用的是本地开发计算机,则可以通过在C:\ Windows \ System32 \ drivers \ etc \ hosts
中添加以下内容来强制您的域指向localhost127.0.0.1 www.example.com
此外,您需要在php.ini中启用allow_url_include,如此
allow_url_include = On
答案 5 :(得分:0)
对我来说,以下技巧有效。 我正在使用带有IIS的Windows,因此DOCROOT是C:\ Inetpub \ wwwroot。
subst W: C:\Inetpub\wwwroot
include_path = ".;c:\php\active\includes;W:\" doc_root = W:\
现在,两个版本都允许:
include '/common/common.inc'; // access to mapped W: root include 'common/common.inc'; // access to W: within include_path
答案 6 :(得分:0)
某些版本的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');
}
答案 7 :(得分:0)
也许有点不合常规
如果我有类似的情况
include (substr(dirname(__FILE__),0,strpos(dirname(__FILE__), '/dir1'))."/example/example.php");
我使用的解决方案很简单。 获取“ Dir1”之前的路径
类似的东西
/var/www/namesite/internalDirA/dirToInclude/example.php
/var/www/namesite/internalDirA/dir1/dirA/example.php
/var/www/namesite/internalDirA/dir1/dirB/example.php
我发现它很有用,我需要重命名主子目录 例如来自
/var/www/namesite/dirReserved/dirToInclude/example.php
/var/www/namesite/dirReserved/dir1/dirA/example.php
/var/www/namesite/dirReserved/dir1/dirB/example.php
到
SELECT
a.table_name,
a.column_name
FROM
ALL_TAB_COLUMNS a
WHERE owner = '<your user>'
AND a.SAMPLE_SIZE = a.NUM_NULLS
答案 8 :(得分:0)
这个答案并不是真正针对根目录,但一种解决方法是使用 ../
跳转到父目录。
当然,您需要知道这种方法的文件结构。
例如,您可以使用:
include('../parent.php');
include('../../grand_parent.php');