【问题标题】:Unified path to require a file in PHP from all folders要求所有文件夹中的 PHP 文件的统一路径
【发布时间】:2013-05-25 08:42:01
【问题描述】:

我有当前的树。

/edu/index.php
/edu/Classes/Connection.php
/edu/Classes/User.php
/edu/Handlers/Post.php

当我需要在 index.php 中使用 Connection.phpUser.php 中的函数时,我需要它们使用:

require_once './Classes/Connection.php';
require_once './Classes/User.php';

但是User.php 的一些函数也需要Connection.php 的函数才能工作,所以由于index.php 是请求的来源,我需要Connection.phpUser.php 中使用:

require_once './Classes/Connection.php';

但有时我需要使用与Post.php相同的功能,所以

如果Post.php 是文件发送请求,则User.php 内的require_once './Classes/Connection.php'; 不起作用。

难道没有统一的路径或解决方案,以便我能够以相同的方式从项目中的任何位置获取文件吗?我真的很想避免这样的解决方案......

public function UserFunction($path){
  require_once $path;
}

并根据我在项目文件夹中的位置更改每次调用的参数。

【问题讨论】:

  • 定义绝对路径配置的常量,并在所有 require_once 路径前加上该常量。
  • 或者更好的是,使用$_SERVER['DOCUMENT_ROOT']

标签: php path directory require


【解决方案1】:

如果您尝试包含的文件主要是类,则最好实现__autoload 函数。当您实例化一个类时,如果尚未定义该类,则使用类名调用 __autoload 方法,以便您可以包含该文件。如果您创建一个简单的标准,例如所有类都位于 $_SERVER['DOCUMENT_ROOT'].'/classes/' 文件夹中,并且文件名与 ClassName.php 等类名相同,则您可以根据需要动态加载任何类。

另外,通常被看不起,但我想我会提到它,因为我还没有看到它提供。您可以调用 set_include_path() 函数,它允许您设置 php 在包含文件时查看的路径。但是,这可能会引起一些麻烦。例如,我的工作在子域下托管多个站点,每个站点都有自己的文档根目录。在文档根目录下,每个站点都有自己的“包含”文件夹。大约 8 年前,某个天才将全局 apache 配置中的包含路径设置为 /var/www/site1/includes;/var/www/site2/includes...etc。问题是当site1 中存在与site2 同名的文件并且您尝试包含它时,您将始终包含来自site1 的文件,因为php 会在那里找到该文件并停止查找。它不时引起一些小麻烦。

【讨论】:

    【解决方案2】:

    最好的方法是包含相对于__DIR__ 的文件以获取相对于另一个文件的文件。

    您可以包含的其他优点是

    $_SERVER["DOCUMENT_ROOT"]
    

    或使用 htaccess 自己制作。

    在 .htaccess 中放置

    SetEnv MY_INCLUDE_PATH "/path/to/my/php/files";
    

    然后在php中

    include ($_SERVER["MY_INCLUDE_PATH"]."/Connection.php");
    

    【讨论】:

      猜你喜欢
      • 2011-02-11
      • 2014-03-12
      • 2023-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多