如何做相对路径?如何使用__dir__
这是我之前的文件结构
public_html
├── config
| |__config.php
├── core
| |__init.php
├── helper
| |__helper.php
├── libraries
| |__page1.php
├── templates
│ ├── page1template.php
│
│__index.php
│__page1.php
有太多页面后。我想把它们整理成“rep”文件夹和“admin”文件夹。所以我的新文件结构看起来像这样
public_html
├── config
| |__config.php
├── core
| |__init.php
├── helper
| |__helper.php
├── libraries
| |__page1.php
├── templates
│ ├── page1template.php
│
│__index.php
|
├── rep
| |__page1.php
├── admin
│ ├── page1.php
问题是,我的要求和包括仍然是绝对的路径。见下面的样本
我的初始文件
//Start Session
session_start();
//Include Configuration
require_once('config/config.php');
//Helper Function Files
require_once('helpers/system_helper.php');
require_once('helpers/format_helper.php');
//Autoload Classes
function __autoload($class_name){
require_once('libraries/'.$class_name .'.php');
}
我的page1.php
<?php require('core/init.php'); ?>
//Get Template & Assign Vars
$template = new Template('templates/rep/page1.php');
如果我在每条路径前添加“../”。然后页面将正确加载。见下文
require_once('../config/config.php');
require_once('../helpers/system_helper.php');
require_once('../helpers/format_helper.php');
require_once('../libraries/'.$class_name .'.php');
require('../core/init.php');
$template = new Template('../templates/rep/page1.php');
但是我的index.php会因为index在根文件夹中而中断,所以新路径相对于它是错误的。我发现了两个相关问题。我怀疑它与使用__dir__
替换../有关,但我不知道放在哪里。
Are PHP include paths relative to the file or the calling code?
答案 0 :(得分:2)
就我个人而言,如果我确定结构应该是某种特定的方式,我会尝试对包含该文件的文件进行包含。例如,你可以在core / init.php旁边的core / loader.php上创建一个文件......然后如果你假设加载器和其他文件之间的相对结构总是保持不变,那么core / loader.php可能像
<?php
// Get the path of whatever folder is holding the core/config/etc folders
$main_dir=RealPath(DirName(__FILE__).'/../');
require("{$main_dir}/config/config.php");
require("{$main_dir}/helpers/system_helper.php");
// etc
?>
这里的重点是,您现在可以将该组文件夹移动到您想要的任何位置(建议:在public_html之外),并且只要您需要使用正确的加载路径,它们仍应加载。