路径混乱:是否需要,包括,fopen等以同样的方式采取所有路径?

时间:2009-12-27 17:48:49

标签: php

我稍微记得从很久的PHP天(几年前)开始,不同的功能想要有不同的路径。我的意思是......从不同的角度出发。有些是相对的,有些是绝对的,等等。

fopen怎么样?这是同样的要求吗?相同情况下的路径相同吗?

4 个答案:

答案 0 :(得分:1)

路径始终相对于初始脚本的位置,即使解析器正在通过位于不同目录中的包含。

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

dirname(__FILE__)

或在PHP 5中

__DIR__

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

答案 1 :(得分:0)

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

说你的ini文件的包含路径条目是:

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

然后在你的脚本中,无论你的文档树在哪里,例如

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

你这样做是为了包含一个文件:

include '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

或google for“include_path php”

答案 2 :(得分:0)

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

@troelskn:

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

  

如果定义了一个路径 - 无论是绝对路径(从Windows上的驱动器号或者\或Unix / Linux系统上的/开始)还是相对于当前目录(以。或..开头) - include_path将被忽略共

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

答案 3 :(得分:0)

这个问题已经很老了,但是仍然存在一些混乱。具有不同相对路径的不同功能在某些点仍然存在。在示例中,以下内容可能无法按预期工作:

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;
}