我從頭開始構建一個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.php
和header.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'
沒有工作我不知道我做錯了什麼。
謝謝你們!
的問題很可能是使用'當前工作directory'目錄的絕對路徑 - 見'GETCWD();'是與PHP文件不一樣 - 請參閱'__DIR__'。相對路徑基於「當前工作目錄」而不是「__DIR__」。正如答案中提到的 - 最好總是使用絕對路徑。 –