21

我的大部分网站都在我的根目录中。在该目录中有“css”、“functions”、“images”文件夹。当我在 index.php 或任何其他根文件中包含 php 文件时,一切正常。它很好地包含它并很好地执行它。

但是当我创建文件夹“博客”时出现问题。所以这是一个全新的独立根文件夹,带有 CMS 和它自己的“根”文件。我尝试包含主根目录中的 css 或主根目录中“functions”文件夹中的一些 php 文件,一切都崩溃了。我知道我必须将其包含为../functions/myfile.com. 但是此文件包含其他一些文件,因此它无法正常工作并且无法正确包含其他文件。

有没有办法解决这个问题?

4

5 回答 5

35

您可以使用. 仅用于测试,如果您以正确的方式进行操作,您可以回显路径以确保其正常工作。您永远不想显示包含要求等内容的本地服务器路径。$_SERVER['DOCUMENT_ROOT']

站点 1

echo $_SERVER['DOCUMENT_ROOT']; //should be '/main_web_folder/';

包括以下站点之一:

echo $_SERVER['DOCUMENT_ROOT'].'/includes/'; // should be '/main_web_folder/includes/';

站点 2

echo $_SERVER['DOCUMENT_ROOT']; //should be '/main_web_folder/blog/';

要访问的实际代码包括site2内部的site1 ,您会说:

include($_SERVER['DOCUMENT_ROOT'].'/../includes/file_from_site_1.php');

如果您尝试通过排除和斜杠来访问它,它将仅使用执行查询的文件的相对路径:document rootroot

 //(not as fool-proof or non-platform specific)
 include('../includes/file_from_site_1.php');

包含的路径在任何地方的站点前端(实时)的代码中都没有位置,并且应该只在生产环境中得到保护和使用。

此外,对于网站本身的 URL,您可以使它们相对于域。浏览器会自动填写其余部分,因为他们知道他们正在查看哪个页面。所以而不是:

<a href='http://www.__domain__name__here__.com/contact/'>Contact</a>

你应该使用:

<a href='/contact/'>Contact</a>

为了获得良好的 SEO,您需要确保该博客的 URL 不存在于其他域中,否则它可能会被标记为重复站点。话虽如此,您可能还想在robots.txt文件中添加一行,仅用于 site1

User-agent: *
Disallow: /blog/

其他可能性:

查找您的 IP 地址并包含以下代码片段:

function is_dev(){
  //use the external IP from Google.
  //If you're hosting locally it's 127.0.01 unless you've changed it.
  $ip_address='xxx.xxx.xxx.xxx';

  if ($_SERVER['REMOTE_ADDR']==$ip_address){
     return true;
  } else {
     return false;
  } 
}

if(is_dev()){
    echo $_SERVER['DOCUMENT_ROOT'];       
}

请记住,如果您的 ISP 更改了您的IP,例如您有 DCHP 动态 IP,您需要更改该文件中的 IP 才能看到结果。我会将该文件放在一个包含中,然后在页面上要求它进行调试。

如果您对使用浏览器控制台日志等现代方法没问题,您可以改为这样做并在浏览器的调试界面中查看它:

if(is_dev()){
    echo "<script>".PHP_EOL;
    echo "console.log('".$_SERVER['DOCUMENT_ROOT']."');".PHP_EOL;
    echo "</script>".PHP_EOL;       
}
于 2013-04-16T23:55:22.863 回答
8

如果我理解正确,您有两个文件夹,一个包含您想要include放入另一个文件夹中的文件的 php 脚本?

如果是这种情况,您只需要按照正确的方式跟踪即可。假设您的文件夹设置如下:

root
    includes
        php_scripts
            script.php
    blog
        content
            index.php

如果这是建议的文件夹结构,并且您尝试将“Script.php”文件包含到“index.php”文件夹中,则需要以这种方式包含它:

include("../../../includes/php_scripts/script.php");

我这样做的方式是视觉的。我将鼠标指针放在 index.php 上(查看文件结构),然后每次上一个文件夹时,我输入另一个“../”然后你必须确保你上文件夹结构之上的文件夹你想开始向下进入。之后,它只是普通的文件夹层次结构。

于 2013-04-16T23:54:53.083 回答
2

以上答案都没有为我解决这个问题。我这样做了(Laravel 与 Ubuntu 服务器):

<?php
     $footerFile = '/var/www/website/main/resources/views/emails/elements/emailfooter.blade.php';
     include($footerFile);
?>
于 2017-03-15T09:25:16.163 回答
1

尽量不要使用相对路径。使用通用包含,将 DocumentRoot 服务器变量分配给全局变量,并从那里构造绝对路径。或者,对于较大的项目,考虑实施 PSR-0 SPL 自动加载器。

于 2013-04-16T23:57:44.593 回答
1

我有同样的问题,并在https://css-tricks.com/php-include-from-root/上找到了修复它的代码

<?php 
   $path = $_SERVER['DOCUMENT_ROOT'];
   $path .= "/common/header.php";
   include_once($path);
?>

于 2021-05-08T05:00:57.457 回答