Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/253.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 路径混淆:require、include、fopen等是否以相同的方式选择所有路径?_Php - Fatal编程技术网

Php 路径混淆:require、include、fopen等是否以相同的方式选择所有路径?

Php 路径混淆:require、include、fopen等是否以相同的方式选择所有路径?,php,Php,我稍微记得,在很久以前的PHP时代(几年前),不同的函数想要有不同的路径。我是说…从不同的角度出发。有些是相对的,有些是绝对的,等等 福彭怎么样?这和我的要求是一样的吗?相同情况下的相同路径?路径始终相对于初始脚本的位置,即使解析器正在处理驻留在不同目录中的包含 要可靠地使用相对于当前文件的路径,请使用 dirname(__FILE__) 或者使用PHP5 __DIR__ 此外,正如@troelskn在下面指出的,require和include搜索路径始终相对于初始脚本的位置,即使解析器正在

我稍微记得,在很久以前的PHP时代(几年前),不同的函数想要有不同的路径。我是说…从不同的角度出发。有些是相对的,有些是绝对的,等等


福彭怎么样?这和我的要求是一样的吗?相同情况下的相同路径?

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

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

dirname(__FILE__)
或者使用PHP5

__DIR__

此外,正如@troelskn在下面指出的,
require
include
搜索路径始终相对于初始脚本的位置,即使解析器正在处理驻留在不同目录中的include

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

dirname(__FILE__)
或者使用PHP5

__DIR__

此外,正如@troelskn在下面指出的,
require
include
搜索include和require将首先查找与php.ini中给定的设置相关的文件

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

include_path = "var/www/includes;/var/www/PEAR" include_path=“var/www/includes;/var/www/PEAR” 然后在脚本中,无论它们在文档树中的什么位置,例如

/var/www/html/website1/miles/down/in/folders/index.php /var/www/html/website1/miles/down/in/folders/index.php 您只需执行此操作即可包含一个文件:

include 'settings.php' ; 包括“settings.php”; 只要settings.php是include_path文件夹之一,它就会被包括在内,那么您就可以不再担心相对/绝对路径关系

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

有关这方面的更多信息:


或者google for“include_path php”

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

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

include_path = "var/www/includes;/var/www/PEAR" include_path=“var/www/includes;/var/www/PEAR” 然后在脚本中,无论它们在文档树中的什么位置,例如

/var/www/html/website1/miles/down/in/folders/index.php /var/www/html/website1/miles/down/in/folders/index.php 您只需执行此操作即可包含一个文件:

include 'settings.php' ; 包括“settings.php”; 只要settings.php是include_path文件夹之一,它就会被包括在内,那么您就可以不再担心相对/绝对路径关系

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

有关这方面的更多信息:


或者谷歌搜索“include_path php”

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

@Troleskn:

当您使用dirname(_u;FILE _;)时,Include不会解析为Include路径,因为您为Include提供了一个绝对路径。仅当您不提供任何路径,仅提供文件名(既不适用于绝对路径,也不适用于相对路径)时,才会搜索包含路径

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


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

@Troleskn:

当您使用dirname(_u;FILE _;)时,Include不会解析为Include路径,因为您为Include提供了一个绝对路径。仅当您不提供任何路径,仅提供文件名(既不适用于绝对路径,也不适用于相对路径)时,才会搜索包含路径

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


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

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

这个问题由来已久,但仍有一些困惑。在某些点上,具有不同相对路径的不同函数仍然存在。在示例中,以下可能无法按预期工作:

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

php将搜索include路径,因此这并不完全正确。但是,include路径通常包括运行时的工作目录
(当前目录)。在web服务器上下文中,这将初始化为初始脚本的位置。见:和
fopen
不使用include-path。你完全正确;完全忘记了。php将搜索include路径,因此这并不完全正确。但是,include路径通常包括运行时的工作目录
(当前目录)。在web服务器上下文中,这将初始化为初始脚本的位置。见:和
fopen
不使用include-path。你完全正确;完全忘记了。编辑了我的答案。