【发布时间】:2010-12-30 07:22:06
【问题描述】:
我稍微记得从古老的 PHP 时代(几年前)开始,不同的函数希望有不同的路径。我的意思是……从不同的角度开始。有些是相对的,有些是绝对的,等等。
fopen 怎么样?这和require一样吗?相同情况下相同路径?
【问题讨论】:
标签: php
我稍微记得从古老的 PHP 时代(几年前)开始,不同的函数希望有不同的路径。我的意思是……从不同的角度开始。有些是相对的,有些是绝对的,等等。
fopen 怎么样?这和require一样吗?相同情况下相同路径?
【问题讨论】:
标签: php
路径总是相对于初始脚本的位置,即使解析器正在处理驻留在不同目录中的包含。
要可靠地使用相对于当前文件的路径,请使用
dirname(__FILE__)
或在 PHP 5 中
__DIR__
此外,正如@troelskn 在下面指出的那样,require 和 include 搜索 include_path.
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”
【讨论】:
Arg 我想发表评论,但我不能...
@troelskn:
当您使用 dirname(__ FILE __) 时,包含不会解析为包含路径,因为您提供的是包含的绝对路径。仅当您不提供任何路径,只提供文件名时才会搜索包含路径(不适用于绝对或相对路径)。
如果定义了路径——无论是绝对路径(在 Windows 上以驱动器号或 \ 开头,或在 Unix/Linux 系统上以 / 开头)还是相对于当前目录(以 . 或 .. 开头)——include_path 都将被忽略完全一致。
【讨论】:
这个问题已经很老了,但围绕这个问题仍然存在一些混淆。在某些方面,具有不同相对路径的不同功能仍然存在。例如,以下可能无法按预期工作:
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;
}
【讨论】: