Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/9.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
Mod Rewrite规则正在改变PHP中的CWD-为什么?_Php_Apache_.htaccess_Mod Rewrite_Working Directory - Fatal编程技术网

Mod Rewrite规则正在改变PHP中的CWD-为什么?

Mod Rewrite规则正在改变PHP中的CWD-为什么?,php,apache,.htaccess,mod-rewrite,working-directory,Php,Apache,.htaccess,Mod Rewrite,Working Directory,我有一个奇怪的问题,我找不到文档。我在服务器的以下位置有一个页面 {SITE_ROOT}/admin/myfolder/myfile.php 这个文件使用一个include来运行一个全局配置文件,该文件驻留在服务器的根目录上——它是相对于自身来运行的 // {SITE_ROOT}/admin/myfolder/myfile.php // includes {SITE_ROOT}/config.php See below explanation after edit include('..

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

{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()似乎会失败。这就好像是由于启用了重写引擎,php文件的当前工作目录发生了更改

是否在任何地方对此进行了记录,是否有办法防止这种情况发生


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

也许这对您有用:

dirname(__FILE__)
返回文件所在的目录。因此,如果您知道站点的目录结构,您可以使用

dirname(dirname(__FILE__))
你也可以使用

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

在你的情况下,这将成为

include(rtrim(dirname(dirname(__FILE__)),'/\\').DIRECTORY_SEPARATOR.'config.php')

重写规则与您的url不匹配,因此这没有多大意义。这就是你的.htaccess文件中的全部内容吗?@stephenbayer-这就是整个文件。该目录中还有另一个文件使用php动态生成gif图像,这就是规则。@stephenbayer-抱歉,我在最初的问题中遗漏了一个相当重要的信息。现在更新了。这对我来说没有多大意义:
include('/../config.php)--路径以前导斜杠开始(表示绝对路径)。不要使用这样的相对路径,而是使用更可靠的方法:对于
{SITE\u ROOT}/config.php
使用
include($\u SERVER['DOCUMENT\u ROOT']./config.php')