任何人都可以解释为什么这个相对链接在PHP中不起作用?

时间:2010-02-18 08:44:51

标签: php

有一个奇怪的问题,到目前为止让我摸不着头脑。

我有一个索引页面,其中包含一个common.php require文件。在require文件中有六个脚本,其中除了两个脚本之外的所有脚本都与common.php位于同一个文件夹中。

因此,对于同一文件夹中的脚本,我只使用文件名eg-require('filename.php'),它可以正常工作。其余两个脚本位于名为config的相邻文件夹中,因此我尝试使用require('../ config / file.php'),但它不起作用。

奇怪的是,如果我使用索引文件中的相对路径吗?

如果文件在同一个文件夹中但在不同的文件夹中,我怎么能使用相对于common.php的路径呢?

我确信现在有一个合理的解释让我无法理解,所以任何帮助都会受到高度赞赏。

感谢 Ĵ

3 个答案:

答案 0 :(得分:1)

首先设置这样的路径

set_include_path(get_include_path() . PATH_SEPARATOR . realpath("./")); //change accordingly the path e.g. path to common.php

然后使用脚本中所需的文件。

答案 1 :(得分:1)

据我了解,您将文件包含在包含的文件中。据我所知,“../”的翻译取决于当前的工作目录,而不是包含文件所在的目录 - 但我不确定。无论如何,您可以使用以下内容解决包含文件中的问题:

假设:

  • index.php文件位于C:/inetpub/wwwroot/project1
  • inc01.php文件位于C:/inetpub/wwwroot/project1/include/
  • cfg01.php文件位于C:/inetpub/wwwroot/project1/config/

index.php包含:

require( "include/inc01.php" );

在inc01.php中包含cfg01.php,无论容器脚本是否为/index.php,/admin/index.php,/products/laptops/index.php:

require( dirname( dirname( __FILE__ ) ) . "/config/cfg01.php" );

第一个dirname返回inc01.php所在的目录名。第二个返回其父目录。您可以使用常量DIRECTORY_SEPARATOR而不是担心是使用正斜杠还是反斜杠。您可以将dirname级联三次以获得../../,依此类推。

答案 2 :(得分:0)

是包含common-path的common.php部分的文件夹吗?即,如果在索引页面中你只需要('common.php')而不是common.php的相对路径它是否仍然需要它?