2016-01-24 70 views
1

我從頭開始構建一個web應用程序,這是我第一次嘗試這樣的事情。spl_autoload上的PHP require_once,不會加載到子文件夾中

我在做require_once時遇到問題,from with在子目錄中。

文件夾結構:

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'

沒有工作我不知道我做錯了什麼。

謝謝你們!

+2

的問題很可能是使用'當前工作directory'目錄的絕對路徑 - 見'GETCWD();'是與PHP文件不一樣 - 請參閱'__DIR__'。相對路徑基於「當前工作目錄」而不是「__DIR__」。正如答案中提到的 - 最好總是使用絕對路徑。 –

回答

0

I am building a web-app from ground up and it is my first attempt at something like this.

既然你正在構建的新網站,你應該遵循的PSR-0/4具體。已經有自動加載器PSR-0/4兼容,但您可以將此作業保留至composer

回到你的問題,你可以使用絕對路徑。

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

__DIR__是一個神奇的常數,在這種情況下代表init.php

相關問題