【问题标题】:Include php files when they are in different folders包含位于不同文件夹中的 php 文件
【发布时间】:2013-04-09 13:16:20
【问题描述】:

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

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

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

【问题讨论】:

  • “单独的根文件夹”是什么意思?
  • 我建议简化你的包含结构。可能包括主文件中的所有内容。否则,您最终会得到一个难以排除故障的令人讨厌的包含网络。
  • 我的 1. 根文件夹是我的网站所在的文件夹,我的 2. 根文件夹是我的 CMS 所在的“博客”。所以 www.mysite.com 和 www.mysite.com/blog。如果你理解我
  • 您在使用 Wordpress 吗?你想在你的wordpress中包含一些东西,但那个文件不在它之外?您应该能够上下跟踪文件夹。如果是这样,我可以为你写一个例子

标签: php include


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    您可以使用$_SERVER['DOCUMENT_ROOT'] 从每个站点内访问root仅用于测试,您可以回显路径以确保其正常工作,如果您以正确的方式进行操作。您永远不想显示诸如 includes 和 @ 之类的本地服务器路径987654323@

    网站 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/';
    

    要访问的实际代码包括从 site1site2 你会说:

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

    如果您尝试通过排除document rootroot 斜杠来访问它,它只会使用执行查询的文件的相对path

     //(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 文件中添加一行ONLY site1

    User-agent: *
    Disallow: /blog/
    

    其他可能性:

    Look up your IP address 并包含此 sn-p 代码:

    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 以查看结果。我会将那个文件放在一个包含中,然后在页面上要求它进行调试。

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

    if(is_dev()){
        echo "<script>".PHP_EOL;
        echo "console.log('".$_SERVER['DOCUMENT_ROOT']."');".PHP_EOL;
        echo "</script>".PHP_EOL;       
    }
    

    【讨论】:

    • 但是在源代码中显示绝对路径是否安全?访客可以看到它
    • 不,绝对不是。我展示的是,如果你想验证路径,你可以在每个文件夹的某个不起眼的页面上回显它。你永远不想向最终用户展示这些东西......同样没有意义。
    【解决方案3】:

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

    <?php
         $footerFile = '/var/www/website/main/resources/views/emails/elements/emailfooter.blade.php';
         include($footerFile);
    ?>
    

    【讨论】:

    • 拯救了我的早晨
    【解决方案4】:

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

    【讨论】:

      【解决方案5】:

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

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

      root
          includes
              php_scripts
                  script.php
          blog
              content
                  index.php
      

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-01-03
        • 2015-09-23
        • 2016-05-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多