0

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

文件(服务器根)/文件夹/文件夹/test.php

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

文件(服务器根)/文件夹/文件夹/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 的另一个文件的数据

那我该怎么办?

4

5 回答 5

2

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

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

<?php

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

?>

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

于 2013-09-02T19:40:01.910 回答
1

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

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

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

所以,我们可以继续用“test.php”的内容替换包含,然后从那里开始工作。这意味着 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 的魔法常量DIRFILE和调用的函数getcwd(),这些应该可以帮助您做更高级的事情。现在,您可以通过手动调整目录来修复它。

进一步阅读:

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

获取当前脚本文件名

于 2013-09-02T18:50:31.667 回答
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 应该在根目录中,而不是在“子目录”中。

于 2013-09-02T17:18:16.577 回答
1

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

解决方案很简单——定义

// /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);

这应该足以满足您的需求。

于 2013-09-02T17:29:37.160 回答
0

要在 php 脚本中内联评估/执行 php 脚本,您可以使用 eval() 函数。这里有一些更详细的解释: http: //php.net/manual/en/function.eval.php

于 2013-09-02T19:07:58.393 回答