PHP - 如何保存目录的路径?

时间:2014-02-23 17:19:48

标签: php file-io

好吧,假设我在名为/ext/include.php的目录中包含该文件(参见示例1)

我想在“include.php”文件中找到一些代码来找出路径并保存它。 所以例1的路径设置是:/ ext /

代码必须工作,所以如果我通过2个目录包含文件(参见示例2)。 它只是将路径保存为:/ ext / ext /

我尝试使用类似__FILE__的内容,但保存了整个目录。 我只想要包含文件和包含文件之间的路径。

我希望你能帮助一个新人。 :-) 请尽量保持它。因为我正在学习它。

如果你可以同时使用oop和程序示例,那就太酷了!

示例1:

|index.php
|+ext
|  include.php

示例2:

|index.php
|+ext
|  +ext
|    include.php

已更新/解决

我无法回答我自己的问题8小时窝,sooo ..

This is my temporarly soloution:

我相信我找到了自己的问题。 我完成代码后会回来,但这是我发现的。

我知道通过使用__FILES__,我会得到该文件的完整目录。这是通过使用$_SERVER['PHP_SELF']我将得到当前正在执行的脚本的目录,相对于文件根。

通过知道我可以获得2个字符串,我可以比较它们。我可以将目录的其余部分添加到$_SERVER['PHP_SELF']

所以我可以替换看起来像彼此的字符串。最后,我的临时解决方案如下:

// adding the rest of the directory to $_SERVER and replacing / with \ .
    $path_incg = str_replace('/','\\','C:/xampp/htdocs'.dirname($_SERVER['PHP_SELF']).'/');
// taking the parent directory of the full directory to the file.
    $path_incd = dirname(__FILE__);
// replacing the parts that look exactly like each other
    self::$path = str_replace($path_incg,'',$path_incd).'\\'; 
    return self::$path;

示例1:让我们说$_SERVER['PHP_SELF']又名。文件包含在/root/including.php中,并且使用dirname()我们可以获得/root并在两边添加目录的其余部分并替换我们可以获得的/ with \:< / p>

$var1 = c:\xampp\htdocs\root\

通过使用dirname(__FILE__),我们可以将文件目录包含在内,让我们说它在root/inc/include.php中,然后我们得到:

$var2 = c:\xampp\htdocs\root\inc\include.php

现在我们可以使用str_replace()

获取两个文件之间的目录
$finalpath = str_replace($path_incg,'',$path_incd).'\\';

最终结果将是:inc\。 如果您将包含文件放在包含文件下面的站点地图中的任何其他位置,它将找到这两个文件之间的路径。

2 个答案:

答案 0 :(得分:0)

假设包含文件始终存在于目录结构中的主文件下面,那么以下内容应该可以正常工作。

<?php
// Include a FilePathDiff utility.  This utility can be donwloaded at
// https://gist.github.com/joelandsman/9174942
require_once("libs/filepathdiff.class.php");

// Instantiate an instance of our FilePathDiff utility and set the base path. 
// We will reference this object in our include files to register their 
// relative paths.
$fpd = new FilePathDiff();
$fpd->setBasePath(__FILE__);

// Include some files...
require_once('ext/index.php');
require_once('ext/ext/test.php');

您包含的每个文件都应使用以下方法调用在我们的实用程序中注册它的路径:

$fpd->registerPath(__FILE__);

答案 1 :(得分:0)

我相信我找到了自己的问题。 我完成代码后会回来,但这是我发现的。

我知道通过使用__FILES__,我会得到该文件的完整目录。这是通过使用$_SERVER['PHP_SELF']我将得到当前正在执行的脚本的目录,相对于文件根。

知道我可以获得2个字符串。我可以将目录的其余部分添加到$_SERVER['PHP_SELF']

所以我可以替换看起来像彼此的字符串。最后,我的临时解决方案如下:

// adding the rest of the directory to $_SERVER and replacing / with \ .
    $path_incg = str_replace('/','\\','C:/xampp/htdocs'.dirname($_SERVER['PHP_SELF']).'/');
// taking the parent directory of the full directory to the file.
    $path_incd = dirname(__FILE__);
// replacing the parts that look exactly like each other
    self::$path = str_replace($path_incg,'',$path_incd).'\\'; 
    return self::$path;

示例1:让我们说$_SERVER['PHP_SELF']又名。文件包含在/root/including.php中,并且使用dirname()我们可以获得/root并在两边添加目录的其余部分并替换我们可以获得的/ with \:< / p>

$var1 = c:\xampp\htdocs\root\

通过使用dirname(__FILE__),我们可以获取文件的目录,让我们说它在root / inc / include.php中,然后我们得到:

$ var2 = c:\ xampp \ htdocs \ root \ inc \ include.php 我们现在可以使用str_replace()

获取两个文件之间的目录

$ finalpath = str_replace($ path_incg,'',$ path_incd)。'\'; 最终结果将是:inc。如果您将包含文件放在包含文件下面的站点地图中的任何其他位置,它将找到这两个文件之间的路径。