代码之家  ›  专栏  ›  技术社区  ›  cletus

在不知道底层文件系统的情况下加载PHP文件

php
  •  0
  • cletus  · 技术社区  · 15 年前

    关于PHP的ncie的一个特点是,如果执行include/require,它将从文件所在的目录(或者更确切地说是请求的URI)中工作。这意味着,如果希望包含更多的文件,则不需要知道原始脚本的运行位置。您只需要知道当前脚本的位置。

    现在我想加载一个文本文件并处理它。file_get_contents()似乎是一种显而易见的加载方式。问题是我没有同样的奢侈。我要么需要绝对地指定文件路径(我不想这样做),要么必须知道发起调用的文件的相对位置(我也不喜欢)。

    建议?

    10 回复  |  直到 15 年前
        1
  •  9
  •   Grey Panther    15 年前

    您可以使用获取与当前文件关联的目录

    dirname(__FILE__)
    

    file_get_contents(dirname(__FILE__) . '/foo.txt')
    
        2
  •  1
  •   Karmic Coder    15 年前

    使用您想要的文件路径定义一个常量,通常放置配置设置的位置。保持它的简单性和可定制性。

        3
  •  1
  •   Zachery Delafosse    15 年前

    首先,请注意,“相对路径”将来自当前运行的第一个php脚本的路径所在的位置(无论哪个文件可能正在执行此操作)。。。

        4
  •  1
  •   cg.    15 年前

    如果我理解了 file_get_contents 没错,你可以通过 true 作为第二个参数 include_path

    echo file_get_contents('doc/DB/doc/STATUS', true);
    

    将从我的PEAR模块回显状态文档,因为/usr/share/PEAR位于我的include\u路径中。虽然我们正在讨论,但我不相信include()或require()在相对路径上也会起作用,除非“.”是include_路径的一部分。我去查一下。

    更新:好的,我查过了。事实上,无论包含什么,无论是什么,都包含了当前目录。

        5
  •  0
  •   tkotitan    15 年前

    我不知道你怎么知道要包括什么文件。

        6
  •  0
  •   Kevin Tighe    15 年前

    您需要绝对路径才能打开文件。可以使用realpath()将相对url路径转换为绝对路径。

        7
  •  0
  •   jacobangel    15 年前

    查看$\u服务器属性。 http://us2.php.net/manual/en/reserved.variables.server.php

    $_SERVER['DOCUMENT_ROOT'];
    
        8
  •  0
  •   Gumbo    15 年前

    require include 正在从两个路径、当前脚本文件和初始执行的脚本文件解析绝对路径:

    首先在每个文件中查找要包含的文件 include_path 包含路径 /www/ ,包括你在内 include/a.php 还有 include "b.php" b.php 这是第一次进去 /www/libraries/ 然后在 /www/include/ . 如果 filename 开始于 ./ ../ ,它仅在当前工作目录中查找。 http://docs.php.net/include

    但是使用绝对路径更好,所以PHP不需要猜测是哪个文件。

        9
  •  0
  •   Ceilingfish    15 年前

    http://www.smarty.net/ )

    您需要将“{include file=“relative/file/path.ext”}”放在您试图加载的文件中,但smarty至少会为您处理所有的相对路径和混乱。

    http://www.smarty.net/manual/en/language.function.include.php

        10
  •  0
  •   nickf    15 年前

    文件系统功能: http://us2.php.net/manual/en/ref.filesystem.php#73954

    还请注意,文件系统路径分隔符有php常量,例如:

    Ps:Symfony中经常使用的获取绝对路径的技巧是:

    $path = realpath(dirname(__FILE__)).'/whatever.txt';