在php中,路径如何相对于代码所在的文件而不是执行它的文件?

时间:2013-09-02 17:11:45

标签: php relative-path

我有一些代码为php和html的文件:

文件(server-root)/folder/folder/test.php

<?php
$im = file_get_contents("im.txt");
?>

文件(server-root)/folder/folder/im.txt

88-88-88

我在服务器根目录上尝试 index.php 文件:

<?php
include "folder/folder/test.php";
?>

当我包含其他的变量时会丢失,因为im.txt不在服务器根上,而是在/folder/folder/im.txt

我也在服务器根目录上尝试此文件 index.php

<?php
echo file_get_contents("folder/folder/test.txt");
?>

但无效。

我认为在文件包含之前执行文件是一个好主意,因此在index.php上没有php,只显示im.txt的其他文件的数据

所以我必须做什么?

5 个答案:

答案 0 :(得分:2)

您可以通过根据当前脚本文件夹指定完整路径来解决相对路径问题。

例如,在folder/folder/test.php中,您可以执行以下操作:

<?php

    echo file_get_contents(__DIR__ . "/im.txt");

?>

直接调用file_get_contents("im.txt")时,它应该与test.php具有相同的效果,但这次无论你从哪个相对路径调用它都会有效。

答案 1 :(得分:1)

从我能理解的情况来看,您想知道包含文件如何处理变量,例如目录是从包含文件的目录还是从父文件的目录链接。当包含文件时,该文件中的代码将被写入父文件,就像它开始时一样。例如:

父文件:

<?php
  $a = 1;
  include "child.php";
  echo $a+$b; //will display "3"
?>

和child.php:

<?php
  $b = 2;
?>

因此,如果主文件位于您网站的根目录(example.com/index.php) 而index.php有这个:

<?php
  $a = 1;
  include "sub-dir/child.php";
?>

和child.php有这个:

<?php
  $b = 2;
  include "other-child.php";
?>

other-child.php应该在根目录中,而不是在“sub-dir”中。

答案 2 :(得分:1)

您需要了解的主要事项是,当将文件包含到另一个文件中时,相对路径仅相对于主文件,而不是相对于每个包含的文件。

解决方案非常简单 - define

// /var/www/test.php
define("UPLOAD_PATH", "lib/folder/");
include "lib/test.php";

// /var/www/lib/test.php
$filePath = UPLOAD_PATH . 'file.txt';
file_get_contents($filePath);

这应该足以满足你的需要。

答案 3 :(得分:1)

好的,我正在添加另一个答案来帮助您进行修订。我想指出你的问题是向后解释的。您应该从主文件(index.php)开始。为了更清楚,我将以这种方式解释。

服务器根目录下的index.php文件包含:

<?php
include "folder/folder/test.php";
?>

因此,我们可以继续用“test.php”的内容替换include,然后从那里开始工作。这意味着index.php现在看起来像这样:

<?php
  $im = file_get_contents("im.txt");
?>

我几乎可以肯定这就是你迷失的地方。服务器根目录下的文件正在运行上面的代码。 Witch意味着它正在寻找(server-root)/im.txt。但是您已经说过它位于(server-root)/folder/folder/im.txt。因此,将“test.php”中的那一行更改为该目录,如下所示:$im = file_get_contents("folder/folder/im.txt");

现在,index.php将引入test.php的代码,然后在相应的文件夹中查找“im.txt”,index.php将如下所示:

<?php
  $im = '88-88-88';
?>

正如我所说,有很多方法可以处理相对链接以使它们更具动态性,以防您想要在不同目录中包含文件并更改它相对于它的内容。如果你愿意的话,甚至可以使它相对于“test.php”。研究php的魔术常量 DIR FILE 和称为getcwd()的函数,这些应该可以帮助你做更高级的事情。现在,您可以通过手动调整目录来修复它。

进一步阅读:

http://yagudaev.com/posts/resolving-php-relative-path-problem/

Get the current script file name

答案 4 :(得分:0)

为了在php脚本中内联评估/执行php脚本,你可以使用eval()函数。以下是一些更详细的解释:http://php.net/manual/en/function.eval.php