3

我在使用 PHP 包含路径时遇到了一些麻烦,不明白,那里有什么问题。首先,我想向您展示我的文件/目录结构:

文件/目录结构

 |index.php
 |foo/
     |baz.php
     |bar.inc.php
 |asdf/
     |qwerty.inc.php

/index.php:

  include('foo/baz.php');

/foo/baz.php:

  include('bar.inc.php');
  include('../asdf/qwerty.inc.php')

-files的内容在.inc.php这里无关紧要。

这是问题所在:

如果我/foo/baz.php直接打电话,这两个包括工作正常。但是如果我打电话/index.php,那么第一个包含工作,第二个失败。这是为什么?

第一条路径显然会在包含时转换,但第二条路径并非如此。我想通了,这与前面的有关../,但我不知道如何解决这个问题。这可能是 PHP 的安全/配置问题吗?

顺便说一句,错误输出是:

Warning: include(../asdf/qwery.inc.php): failed to open stream:
No such file or directory in /foo/baz.php
4

1 回答 1

4

包含从运行脚本的位置进行评估。当您使用include另一个文件时,您实际上是将该文件的内容拉入该位置的正在运行的脚本中。

对于应该评估相对于包含文件位置的包含的文件,您可以执行以下操作:

/foo/baz.php

include(dirname(__FILE__) . '/bar.inc.php';
include(dirname(__FILE__) . '/../asdf/qwerty.inc.php'

从文档中:

__FILE__是文件的完整路径和文件名。如果在包含中使用,则返回包含文件的名称。自 PHP 4.0.2 起,__FILE__始终包含一个绝对路径,符号链接已解析,而在旧版本中,它在某些情况下包含相对路径。

dirname给定一个包含文件或目录路径的字符串,此函数将返回父目录的路径。

[http://php.net/manual/en/function.dirname.php] [http://php.net/manual/en/language.constants.predefined.php]

于 2013-09-28T13:46:49.500 回答