【问题标题】:PHP - with require_once/include/require, the path is relative to what?PHP - 使用 require_once/include/require,路径与什么相关?
【发布时间】:2010-12-29 14:40:33
【问题描述】:

"index.php" 上时,我在require_once("/all_fns.php") 上。

"all_fns.php" 本身需要具有相对于all_fns.php(本身)的路径的文件。

我的问题是,我应该在 all_fns 上写相对于 all_fns.php 还是 index.php 的路径?

这一切都让我很困惑,想弄清楚。

【问题讨论】:

  • 附带说明,“/all_fns.php”是一个绝对路径,它将在操作系统的根目录中查找文件(在非Windows系统上)
  • 在 Windows 系统上也是如此。它将在当前驱动器的根目录中搜索。

标签: php path


【解决方案1】:

它们被视为相对于index.php

如果您需要引用与包含相关的文件,请使用

__DIR__."/relative/file.php";

【讨论】:

  • 当我想要一个相对路径时,这对我有用。 require_once('../bla.php');行不通。 require_once(__DIR__.'/../bla.php');工作。
  • @AlixAxel dirname(__FILE__) 在旧 PHP 版本上是必需的。
  • @ObsessiveFOSS:是的,但是 OP 没有说明他使用的是 非常 旧的 PHP 版本,我们可以假设他使用的是最新的稳定版本。
  • @AlixAxel 所以假设是最新版本?
  • @ObsessiveFOSS:不是最新的,而是最新的稳定版本(服务器包需要 6 个月才能赶上 - launchpad.net/ubuntu/+source/php5),__DIR__ 自 2009 年 6 月 30 日以来一直稳定。无论哪种方式,答案和评论仍然提供两种选择,我只是认为我们不应该提倡史前代码。但话又说回来,SourceForge 一直支持 PHP 3.X 很长一段时间。
【解决方案2】:

它们相对于getcwd()

【讨论】:

    【解决方案3】:

    在 index.php 中定义一些目录

    define ( 'INCLUDES_DIR', dirname( __FILE__ ) );
    define ( 'INCLUDES_DIR2', INCLUDES_DIR . '/some_directory' );
    

    然后在所有其他文件中你可以使用INCLUDES_DIR

    include( INCLUDES_DIR1 . 'file.php' );
    

    【讨论】:

      【解决方案4】:

      任意使用

      echo in_get("include_path") ;

      或者打开您的 ini 文件并找出您的 ini 路径是什么,然后将您的包含文件放在那个目录(或其中一个目录)中,让您永远不必担心绝对/相对包含问题。

      【讨论】:

      • 没有名为in_get() 的函数。你的意思是ini_get()
      猜你喜欢
      • 2012-07-08
      • 2013-10-08
      • 2015-10-31
      • 2011-12-08
      • 2011-08-28
      • 2011-06-08
      • 1970-01-01
      • 1970-01-01
      • 2018-10-12
      相关资源
      最近更新 更多