spl_autoload上的PHP require_once,不会加载到子文件夹中

时间:2016-01-24 00:11:04

标签: php

我正在从头开始构建一个网络应用程序,这是我第一次尝试这样的事情。

从子目录中执行require_once时遇到问题。

文件夹结构:

Root + browse  -> file.php
     + classes -> User.php
     + core    -> init.php
     +
     +
     -> index.php
     -> random.php

我的每个文件都是这样开始的,并且工作正常

<?php
require_once '/core/init.php';

# Head
require_once '/head.php';

$user = new User();

# Header
require_once '/header.php';

head.phpheader.php位于root folder,页面工作正常,例如index.php等。

我在browse->file.php中遇到问题,代码如下:

<?php
require_once '../core/init.php';

# Head
require_once '../head.php';

$user = new User();

# Header
require_once '../header.php';

错误:

Warning: require_once(classes/User.php): failed to open stream: No such file or directory in /home/vagrant/vm/data/core/init.php on line 27

Fatal error: require_once(): Failed opening required 'classes/User.php' (include_path='.:/usr/share/php:') in /home/vagrant/vm/data/core/init.php on line 27

我的init.php文件:

session_start();

$directory = $_SERVER['DOCUMENT_ROOT'];

spl_autoload_register(function ($class) {
    require_once 'classes/'.$class.'.php';
});

require_once $directory.'/classes/Hash.php';

require_once $directory.'/functions/sanitize.php';

我甚至继续添加$directory. '/classes/'.$class.'.php'; 这打破了整个网站..

我也尝试在我的file.php中使用,$ directory = $ _SERVER ['DOCUMENT_ROOT']进行引用;并做require_once $directory.'/head.php'

没用,我不知道我做错了什么。

谢谢你们!

1 个答案:

答案 0 :(得分:0)

  

我正在从头开始构建一个网络应用程序,这是我第一次尝试这样的事情。

由于您要构建新网站,因此您应该遵循PSR-0/4的具体内容。已经有自动加载器PSR-0/4兼容,但您可以将此作业保留为composer

回到你的问题,尽可能使用绝对路径。

spl_autoload_register(function ($class) {
    require_once __DIR__.'/../classes/'.$class.'.php';
});

__DIR__是一个魔术常量,在这种情况下表示init.php目录的绝对路径