我有一些文件的代码是php和html:
文件(服务器根目录)/folder/folder/test.php:
<?php
$im = file_get_contents("im.txt");
?>
文件(服务器根目录)/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 的数据
那我该怎么办?
您可以通过基于当前脚本文件夹指定完整路径来解决相对路径问题。
例如,在folder/folder/test.php
中,您可以执行以下操作:
<?php
echo file_get_contents(__DIR__ . "/im.txt");
?>
当直接调用test.php
时,它应该具有与file_get_contents("im.txt")
相同的效果,但这一次,无论您从哪个相对路径调用它,它都会起作用。
根据我对您的情况的了解,您想知道包含文件将如何处理变量,例如目录是从包含文件的目录链接还是从父文件的目录连接。当包含一个文件时,该文件中的代码将被写入父文件,就像它一开始就在那里一样。例如:
父文件:
<?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"中。
您需要了解的主要内容是,当将一个文件包含到另一个文件中时,相对路径仅相对于主文件,而不是相对于每个包含的文件。
解决方案非常简单-定义
// /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);
这应该足以满足你的需要。
好的,我添加另一个答案来帮助您进行修订。我想指出的是,你的问题是向后解释。您应该从主文件(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-rroot)/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/
获取当前脚本文件名
为了在php脚本中内联评估/执行php脚本,可以使用eval()函数。以下是一些更详细的解释:http://php.net/manual/en/function.eval.php