我有一个奇怪的问题,我找不到文档。我的服务器中有以下位置的页面。
{SITE_ROOT}/admin/myfolder/myfile.php
此文件使用include来运行驻留在服务器根目录上的全局配置文件 - 它相对于自身执行此操作
// {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中的include路径实际上是相对于 this 文件。我已经改变了上面的问题以反映这一点。
答案 0 :(得分:0)
也许这对你有用:
dirname(__FILE__)
返回文件所在的目录。因此,如果您知道网站的目录结构,则可以使用类似
的内容。dirname(dirname(__FILE__))
您也可以使用
DIRECTORY_SEPARATOR
获取特定于服务器操作系统的目录分隔符
在你的情况下,这将成为
include(rtrim(dirname(dirname(__FILE__)),'/\\').DIRECTORY_SEPARATOR.'config.php')