2

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

我有:

配置文件

include('config_mysql.php');
include('language/english.php');

然后我有:index.php

include('config.php');

然后:/ajax/ajax_vote.php

include('../config.php');

为什么index.php两者都包括config_mysql.phplanguage/english.phpajax/ajax_vote.php包括config_mysql.php

4

3 回答 3

0

基本文件夹include()始终是原始脚本的基本文件夹,因此 d 脚本中的include()sinclude()将不直观:

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");

和朋友。

于 2012-06-10T15:16:15.763 回答
0

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

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

于 2012-06-10T17:06:18.433 回答
0

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

而且从我的测试看来(因为我遇到了类似的问题)php include() 在包含文件时会存储另一个临时的 include_path,这就是为什么 ajax_vote.php 可以包含 config_mysql.php。为了说服自己,请尝试将 config_mysql.php 移动到您的 ajax 文件夹:它的工作原理相同,并且 config.php 将能够包含它(但仅在执行 ajax_vote.php 时,而不是 index.php!)。在这种情况下,您有两个包含路径:“/ajax/”和“/”。

但是,当您使用路径(不仅仅是要包含的文件名,还要在字符串中指定文件夹)时,包含路径仅基于执行脚本(例如:仅 '/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 操作系统上的一个错误:在 Windows 上它等于 dirname(__ FILE__ ),但在 UNIX 上它等于根路径。所以 dirname(__ FILE__ ) 肯定更可靠。

于 2012-08-23T14:55:10.147 回答