【问题标题】:Path Confusion: Does require, include, fopen etc. take all their paths the same way?路径混淆:require、include、fopen 等是否以相同的方式采用所有路径?
【发布时间】:2010-12-30 07:22:06
【问题描述】:

我稍微记得从古老的 PHP 时代(几年前)开始,不同的函数希望有不同的路径。我的意思是……从不同的角度开始。有些是相对的,有些是绝对的,等等。

fopen 怎么样?这和require一样吗?相同情况下相同路径?

【问题讨论】:

    标签: php


    【解决方案1】:

    路径总是相对于初始脚本的位置,即使解析器正在处理驻留在不同目录中的包含。

    要可靠地使用相对于当前文件的路径,请使用

    dirname(__FILE__)
    

    或在 PHP 5 中

    __DIR__
    

    此外,正如@troelskn 在下面指出的那样,requireinclude 搜索 include_path.

    【讨论】:

    • php 将搜索包含路径,所以这并不完全正确。但是,include-path 通常包含.(当前目录),它是运行时的工作目录。在 Web 服务器上下文中,这被初始化为初始脚本的位置。请参阅:chdirgetcwdfopen 不使用包含路径。
    • 你说的完全正确;完全忘记了这一点。编辑了我的答案。
    【解决方案2】:

    include 和 require 将首先查找与 php.ini 中给定设置相关的文件。

    假设您的 ini 文件的包含路径条目是:

    include_path = "var/www/includes;/var/www/PEAR"

    然后在您的脚本中,无论在您的文档树中的哪个位置,例如

    /var/www/html/website1/miles/down/in/folders/index.php

    你只是为了包含一个文件:

    包括“settings.php”;

    只要 settings.php 是 include_path 文件夹之一,它就会被包含,那么你就不用担心相对/绝对路径关系了。

    如果您愿意,也可以使用 ini_set() 在 .htaccess 文件和每个文件中更改此设置。

    更多信息: http://php.net/manual/en/function.set-include-path.php http://www.modwest.com/help/kb.phtml?cat=5&qid=98

    或谷歌搜索“include_path php”

    【讨论】:

      【解决方案3】:

      Arg 我想发表评论,但我不能...

      @troelskn:

      当您使用 dirname(__ FILE __) 时,包含不会解析为包含路径,因为您提供的是包含的绝对路径。仅当您不提供任何路径,只提供文件名时才会搜索包含路径(不适用于绝对或相对路径)。

      如果定义了路径——无论是绝对路径(在 Windows 上以驱动器号或 \ 开头,或在 Unix/Linux 系统上以 / 开头)还是相对于当前目录(以 . 或 .. 开头)——include_path 都将被忽略完全一致。

      http://php.net/manual/en/function.include.php

      【讨论】:

        【解决方案4】:

        这个问题已经很老了,但围绕这个问题仍然存在一些混淆。在某些方面,具有不同相对路径的不同功能仍然存在。例如,以下可能无法按预期工作:

        if(is_file($target)){
            include $target;
        }
        

        is_file, is_dir, fopen - 将使用相对于 HTTP 请求请求的文件的路径,不受 set_include_path() 的影响

        include,require - 可能有一个不同的路径分配给 set_include_path()

        所以更正确的是上面的代码应该是这样的:

        if(is_file(get_include_path().'/'.$target)){
            include $target;
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2010-12-29
          • 2017-07-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-07-17
          • 1970-01-01
          相关资源
          最近更新 更多