php嵌套包含行为

Nat*_*n H 4 php relative-path include

在我的代码中的许多地方,我做的事情如下:

file1.php:
<?php
include('../file2.php');

file2.php:
<?php
include('anotherdirectory/file3.php');
Run Code Online (Sandbox Code Playgroud)

根据我尝试此​​操作的服务器或设置,它可以设置"包含者"或"包含"的相对路径.这真令人困惑.所以file1可能会尝试包含"../anotherdirectory/file3.php",或者它可能会尝试"anotherdirectory/file3.php".

什么设置决定了这种行为?我希望控制这个......

a1e*_*x07 11

在我需要使用相对路径的情况下,我使用以下语法:

include (realpath(dirname(__FILE__)."/another_folder/myfile.php"));
Run Code Online (Sandbox Code Playgroud)


Lot*_*tes 8

我建议使用绝对路径.在保持可移植性的同时执行此操作的一种好方法是在public_html/index.php中进行如下声明:

define('ROOT', dirname(__FILE__));
Run Code Online (Sandbox Code Playgroud)

然后,您可以编写包含这样的包含非常简单的内容:

include(ROOT.'/file.php');
Run Code Online (Sandbox Code Playgroud)

否则,PHP会检查文件是否在php.ini定义的包含路径中.如果它不存在,它会尝试当前脚本的相对路径.这是不可预测和不可维护的,因为您可能会包含来自不同相对位置的文件.

编辑:如果你经常包含很多类文件,你可能想要研究自动加载.如果您以面向对象的方式编程,它会使一切变得简单.我个人从未在我的代码中写过"包含"这个词很长一段时间.

编辑2:您可以使用php.ini指令 auto_prepend_file自动包含一个单行文件,其中包含每个脚本的ROOT定义.