为什么这些相对路径在php中不起作用

whe*_*hys 3 php path relative-path include

我的app结构如下

application -> views -> templates
                             // some more files
                     page.php
            -> controllers 
                     home.php        
            -> models 
                     items.php
            router.php
index.php
Run Code Online (Sandbox Code Playgroud)

第一种情况:

的index.php

include 'application/routes.php';
Run Code Online (Sandbox Code Playgroud)

routes.php文件

require "controllers/home.php";
Run Code Online (Sandbox Code Playgroud)

控制器/ home.php

require '/application/models/clusters.php'; //works
require 'application/models/clusters.php'; //works
require '../models/clusters.php'; //doesn't work
Run Code Online (Sandbox Code Playgroud)

为什么第一行有效但不是最后一行?

第二种情况:

的index.php

include 'application/views/page.php';
Run Code Online (Sandbox Code Playgroud)

page.php文件

glob("application/views/templates/*.php") // array of files
glob("templates/*.php") // empty array
Run Code Online (Sandbox Code Playgroud)

我认为我对php中的路径如何工作的理解有问题,但我无法弄清楚它是什么.有时路径似乎是相对于当前脚本,相对于index.php而言相对于其他时间,但不一定与我在启动路径时相关联/

jri*_*iro 5

请试试这个:

require 'application/controllers/home.php';

require 'application/models/clusters.php';
Run Code Online (Sandbox Code Playgroud)

问题是PHP中的路径始终相对于第一个文件路径,在本例中为index.php.所以你必须包含目录'application'.

另一种方法是使用set_include_path:http://php.net/manual/pt_BR/function.set-include-path.php

编辑

要查看include_path:

echo ini_get('include_path');
Run Code Online (Sandbox Code Playgroud)

  • 如果您不想使用set_include_path,但是您遍历多个文件,每个文件中包含include,`require(dirname(__ FILE __).'/ path');`将工作 (3认同)