Php 如何使用相对于文件所在位置的路径包含文件?

Php 如何使用相对于文件所在位置的路径包含文件?,php,Php,假设我在父目录中有两个目录,foo和bar,这些目录包含一些PHP文件: / /index.php /foo /foo/functions.php /foo/stuff.php /bar /bar/doodie.php 比如说: functions.php包括stuff.php index.php包括functions.php doodie.php包括functions.php 基于这种结构,运行index.php时,它将在/foo目录中查找/foo/functions.php但是,stu

假设我在父目录中有两个目录,foobar,这些目录包含一些PHP文件:

/
/index.php

/foo
/foo/functions.php
/foo/stuff.php

/bar
/bar/doodie.php
比如说:

  • functions.php
    包括
    stuff.php
  • index.php
    包括
    functions.php
  • doodie.php
    包括
    functions.php
  • 基于这种结构,运行
    index.php
    时,它将在
    /foo
    目录中查找
    /foo/functions.php
    但是,
    stuff.php
    必须根据
    index.php
    的位置使用相对路径包含。在运行
    index.php
    的情况下,这是有效的调用
    doodie.php
    时,它不起作用,因为
    functions.php
    /foo
    目录中查找
    stuff.php
    ,当位置为
    /bar
    时,该目录不存在

    是否可以根据文件的驻留位置而不是调用位置来包含文件,而不使用绝对路径(和)

    如果这不清楚,我很抱歉,这真的很难描述…

    您应该使用绝对路径

    当然,您不需要每次都包含完整路径。通常的过程是定义一个名为APP_PATH的常量,并在引导中设置应用程序的绝对路径

    之后,无论何时您想要包含一个文件,都要在include调用中附加APP_PATH常量。这会解决你的问题

    您还可以查看include_path选项,这取决于文件的位置-

    您可以这样做:
    在基本文件夹中创建一个文件;在此文件中定义这些变量
    定义('root',服务器['DOCUMENT_root']);这将确保获得根文件夹
    定义('foo',root./foo/');这定义了foo文件夹的路径
    定义('bar',root./bar');这定义了bar文件夹的路径

    现在,在您需要调用的任何文件中,包括基本文件,并且您可以访问这些文件夹中的任何文件
    因此,如果您已经在/bar/doodie.php中,只需包含(foo.'functions.php'),反之亦然

    希望这能有所帮助。

    我建议你走MVC的路线。这很容易,但也很可靠。只需将所有请求重定向到根目录中的index.php?path=database.php(比如bootstrap.php)形式的一个文件,然后定义路径。下面是我在自制的MVC框架中使用的文件示例

    /**
     * BASE_PATH is for server side inclusions.
     * BASE_URL is for client side inclusions (scripts, css files, images etc.) 
     */
    define("DS", DIRECTORY_SEPARATOR);
    define("BASE_PATH", dirname(realpath(__FILE__)).DS);
    define("BASE_URL", dirname(realpath($_SERVER["SCRIPT_NAME"])).DS);
    define("APP_PATH", BASE_PATH."application".DS);
    
    //$url = $_GET['base_url'];
    
    
    /**Include core file which loads all necessary files */
    require_once (BASE_PATH."core".DS."core.php");
    
    这里是core.php(只有一行,因为它有很多行)


    由于某种原因,它不允许我发布。约翰普说,基本上说了我要说的一切。祝你好运我理解此解决方案,但我在哪里存储APP_PATH常量?当从不同的地方调用时,它不会产生相同的问题吗?@Ozbekov绝对路径的唯一目的是“当从不同的地方调用时,不会产生相同的问题”。之所以称为“绝对”,是因为您知道为什么PHP不使用前导斜杠来创建相对于文档根的路径吗?例如,当在网站上发布图像URL时,这种方法就起作用
    include'/index.php'
    @mrtsherman php向文件系统致敬。PHP可以而且经常访问文档根以外的内容。@mrtsherman,因为就浏览器而言,这是域的绝对路径,与Web服务器文件系统分离。
    //Load config files
    require_once(BASE_PATH."config".DS."config.general.php");