2010-02-18 31 views
0

出现了一个奇怪的问题,至今让我挠了挠头。任何人都可以解释为什么这个相对链接在PHP不起作用?

我有一个带有common.php需要文件几个文件夹的索引页。在require文件中有六个脚本,除了两个以外,其他所有脚本都与common.php位于同一个文件夹中。

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

奇怪的是,如果我使用索引文件的相对路径,它的工作原理是什么?

如何使用相对于common.php的路径,如果文件位于同一个文件夹中但不在其他文件夹中时?

我确定有一个合理的解释,现在逃脱我,所以任何帮助将不胜感激。

感谢 Ĵ

回答

1

据我所知,你在包含文件中包含文件。据我所知,“../”的翻译取决于当前的工作目录,而不是包含文件所在的目录 - 但我不确定。无论如何,你可以解决该问题所包含的文件里面有东西沿着这些路线:

假设:

  • index.php文件驻留在C:/inetpub/wwwroot/project1
  • inc01.php文件驻留在C:/inetpub/wwwroot/project1/include/
  • cfg01.php文件驻留在C:/inetpub/wwwroot/project1/config/

index.php co ntains:

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以获得../../等等。

+0

FWIW,你可以通过说“require(dirname(__ FILE__)。”/../config/cfg01.php“)来简化它。 – Narcissus 2010-02-18 12:09:49

0

是万一含路径包括,您的common.php部分的文件夹?即,如果在索引页面中您只需要('common.php')而不是common.php的相对路径,它是否仍然会检索它?

+0

使用just require('common.php')不起作用。 这在index.php 需要('folder1/folder2/common。php') 然后与上面相同。四个文件在folder2中,两个在folder3中。想不到为什么它会使用../folder3/file.php来拾取folder2中的文件而不是folder3? – Taylor 2010-02-18 09:02:01

1

首先设置的路径是这样

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

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

+0

还没有使用include_paths。想知道为什么4个文件可以使用来自父级(common.php)的相对路径,另外两个使用index.php(不是父级)的相对路径? 是否使用require('folder1/folder2/common.php')将folder2设置为include_path? – Taylor 2010-02-18 10:20:49

+0

如果你在common.php中编写上面的代码,那么包含路径将被设置为common.php – 2010-02-18 11:02:41

+0

的路径,但这不起作用,但它并不真正是我所追求的。我只是不明白为什么我不能相对于common.php后退,但可以前进。 例如,我可以通过使用'folder4/file'来访问与common.php相同的文件夹中的folder4 /文件。但是,如果folder4与common.php文件夹处于同一级别,我无法使用'../folder4/file'访问它。 – Taylor 2010-02-18 14:51:16

相关问题