Php 包含来自父文件夹的文件,该父文件夹包含来自其他文件夹的文件

Php 包含来自父文件夹的文件,该父文件夹包含来自其他文件夹的文件,php,include,directory,Php,Include,Directory,标题很难理解,但我的问题很简单: 我有: config.php 然后是:index.php 然后:/ajax/ajax\u vote.php 为什么index.php同时包含config_mysql.php和language/english.php,而ajax/ajax_vote.php只包含config_mysql.php?include的基本文件夹始终是原始脚本的基本文件夹,因此包含脚本中的include将是不直观的: ajax/ajax_vote.php将尝试包括 ajax/../conf

标题很难理解,但我的问题很简单:

我有:

config.php

然后是:index.php

然后:/ajax/ajax\u vote.php

为什么index.php同时包含config_mysql.php和language/english.php,而ajax/ajax_vote.php只包含config_mysql.php?

include的基本文件夹始终是原始脚本的基本文件夹,因此包含脚本中的include将是不直观的:

ajax/ajax_vote.php将尝试包括

ajax/../config.php
  -> ajax/sonfig_mysql.php
     ajax/language/english.php
你可能想看看

$BASEDIR=dirname(__FILE__);
include("$BASEDIR/config_mysql.php");
include("$BASEDIR/language/english.php");
和朋友。

包含的基本文件夹始终是原始脚本的基本文件夹,因此包含脚本中的包含将是非直观的:

ajax/ajax_vote.php将尝试包括

ajax/../config.php
  -> ajax/sonfig_mysql.php
     ajax/language/english.php
你可能想看看

$BASEDIR=dirname(__FILE__);
include("$BASEDIR/config_mysql.php");
include("$BASEDIR/language/english.php");
和朋友。

原因是,/english.php语言与config.php不在同一目录中。此外,/ajax/ajax_vote.php位于根文件夹之外的某个位置

但是,PHP仍然能够正确地包含文件。我不明白为什么/ajax/ajax_vote.php不包含文件语言/english.php。如果我误解了这个问题,请纠正我。

原因是/english.php语言与config.php不在同一目录中。此外,/ajax/ajax_vote.php位于根文件夹之外的某个位置


但是,PHP仍然能够正确地包含文件。我不明白为什么/ajax/ajax_vote.php不包含文件语言/english.php。如果我误解了这个问题,请纠正我。

Eugen说的是真的,这是因为基本路径与包含的脚本不同

另外,从我的测试来看,这似乎是因为我遇到了一个类似的问题,即当包含文件时,php include将存储另一个临时include\u路径,这就是为什么ajax\u vote.php可以包含config\u mysql.php。为了说服自己,尝试将config_mysql.php移到ajax文件夹中:它的工作原理相同,config.php可以包含它,但只有在执行ajax_vote.php而不是index.php!时才可以!。在本例中,您有两个包含路径:“/ajax/”和“/”

但是,当您使用的路径不仅仅是要包含的文件名,还指定字符串中的文件夹时,包含路径仅基于正在执行的脚本,例如:only“/ajax/”

您可以通过执行以下操作修复此行为:

include(dirname(__FILE__).'/language/english.php'); // don't forget the prepended '/'
或者只是:

include('/language/english.php'); // here again the prepended '/'
但是,我警告您,我还不完全理解第二种方法的工作原理,使用第一种带有dirname的方法可能会更安全


/编辑:我刚刚发现include“/path/to/file”可能是Windows操作系统上的一个bug:在Windows上它等于dirname______;,但在UNIX上它等于根路径。因此dirname\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu

另外,从我的测试来看,这似乎是因为我遇到了一个类似的问题,即当包含文件时,php include将存储另一个临时include\u路径,这就是为什么ajax\u vote.php可以包含config\u mysql.php。为了说服自己,尝试将config_mysql.php移到ajax文件夹中:它的工作原理相同,config.php可以包含它,但只有在执行ajax_vote.php而不是index.php!时才可以!。在本例中,您有两个包含路径:“/ajax/”和“/”

但是,当您使用的路径不仅仅是要包含的文件名,还指定字符串中的文件夹时,包含路径仅基于正在执行的脚本,例如:only“/ajax/”

您可以通过执行以下操作修复此行为:

include(dirname(__FILE__).'/language/english.php'); // don't forget the prepended '/'
或者只是:

include('/language/english.php'); // here again the prepended '/'
但是,我警告您,我还不完全理解第二种方法的工作原理,使用第一种带有dirname的方法可能会更安全


/编辑:我刚刚发现include“/path/to/file”可能是Windows操作系统上的一个bug:在Windows上它等于dirname______;,但在UNIX上它等于根路径。因此,dirname\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu!在基本文件夹中,唯一的问题是folderNo语言中的english.php文件,在我的例子中,它实际上包括config_mysql.php,我保证!在基本文件夹中,唯一的问题是位于语言folder中的english.php文件。ajax_vote.php不包括文件language/english.php,但包含config_mysql.php strage。。。还有其他人吗?完全正确,就是这样。ajax_vote.php不包括文件language/english.php,但包含config_mysql.php strage。。。还有其他人吗?