0

我有一个奇怪的问题,我找不到文档。我在服务器的以下位置有一个页面。

{SITE_ROOT}/admin/myfolder/myfile.php

该文件使用包含来运行驻留在服务器根目录上的全局配置文件 - 它相对于自身执行此操作

// {SITE_ROOT}/admin/myfolder/myfile.php
// includes {SITE_ROOT}/config.php    See below explanation after edit
include('../config.php);

这工作正常,直到我将以下 .htaccess 文件添加到 myfolder 目录中

// {SITE_ROOT}/admin/myfolder/.htaccess
RewriteEngine On
RewriteRule ^([0-9A-Z]+)\.gif$ gif_generator.php?gifid=$1 [L]

这条规则的目的并不重要——事实是上面的页面(myfile.php)不应该受这条规则的影响(它不应该匹配正则表达式,除非我弄错了——我很可能是) . 然而,似乎在使用此规则时, myfile.php 中的 include() 失败。就好像由于启用了 RewriteEngine 而更改了 php 文件的当前工作目录。

这是否记录在任何地方,有没有办法防止这种情况发生?

编辑- 我错过了一些相当重要的事情。原始文件 ({SITE_ROOT}/admin/myfolder/myfile.php) 本身包含在以下位置 ({SITE_ROOT}/admin/frontcontroller.php) 的文件中。myfile.php 中的包含路径实际上是相对于这个文件的。我已经更改了上述问题以反映这一点。

4

1 回答 1

0

也许这对你有用:

dirname(__FILE__)

返回文件所在的目录。因此,如果您知道站点的目录结构,则可以使用类似

dirname(dirname(__FILE__))

你也可以使用

DIRECTORY_SEPARATOR

获取特定于服务器操作系统的目录分隔符

在你的情况下,这将成为

include(rtrim(dirname(dirname(__FILE__)),'/\\').DIRECTORY_SEPARATOR.'config.php')
于 2011-07-15T10:00:30.060 回答