php如何相对路径

时间:2016-06-27 00:18:51

标签: php relative-path

如何做相对路径?如何使用__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__替换../有关,但我不知道放在哪里。

PHP include relative path

Are PHP include paths relative to the file or the calling code?

1 个答案:

答案 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之外),并且只要您需要使用正确的加载路径,它们仍应加载。