PHP 包含找不到文件,但路径似乎准确



我将根目录保存在变量$root中。然后,我将文件地址的其余部分附加为include。

error_reporting(E_ALL);//gives me nothing btw
$root = "http://myhomedirectory.int/tools";
include ("{$root}/resources/php/includes/authenticate.php");
echo     "{$root}/resources/php/includes/authenticate.php";

由于某些原因,include失败了,但当我复制/粘贴echo语句生成的内容时,我会被带到authenticate.php。我已将该文件的权限设置为777。为什么会这样?

include()用于读取本地php文件的文件内容。它开始在php.ini中定义的include目录中搜索,最后尝试将参数解释为相对路径。

当您提供绝对路径(如http://…(时,远程服务器将永远不会返回php脚本,而是返回纯html。(即使是您的LOCAL服务器,使用外部地址的调用也不会返回ANY PHP代码,因为服务器将解析文件内容并返回生成的html(

因此,要在服务器上包含php文件,请使用相对路径或将其放入定义的include目录中。


Sidenode:如果你想包括每个ohter的各种文件,你总是*必须定义相对于执行脚本的路径。假设布局:

/index.php
/folder1/file1.php
/folder1/folder2/file2.php

如果要在file1中包含file2,在index.php中包含file1(这是已执行的脚本(,PHP将执行以下步骤:

index.php是已执行的脚本,因此使用include("folder1/file1.php")将执行所需的操作。但是,如果您现在还想在file1中包含file2,则必须想象一下file1已提升到根目录/,因此只有在定义了相对于根的路径的情况下,file1中的包含才会起作用:include("folder1/folder2/file2.php")-即使file1实际位于folder1中。

直接调用file1现在将失败,因为php将搜索folder1/folder1/folder2/file2.php——这就是为什么将文件放入"全局"包含路径应该优先于相对引用的原因。(如果,则;如果,仅您也直接调用子文件夹的文件*(

通常,您希望对所有请求使用index.php,然后所有子文件夹的文件都与网站的根目录相对,这允许您省略全局包含目录和使用相对路径,以便在同一服务器上拆分多个项目。

(*AJAX会破坏这一原则,因为AJAX调用的php文件将在其实际目录中执行,而不是从包含AJAX调用的文件的目录中执行!(

最新更新