Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/238.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP在spl_自动加载时需要_一次,不会加载到子文件夹中_Php - Fatal编程技术网

PHP在spl_自动加载时需要_一次,不会加载到子文件夹中

PHP在spl_自动加载时需要_一次,不会加载到子文件夹中,php,Php,我正在从头开始构建一个web应用程序,这是我第一次尝试这样做 从子目录中的with执行一次require\u时出现问题 文件夹结构: Root + browse -> file.php + classes -> User.php + core -> init.php + + -> index.php -> random.php 我的每个文件都是这样开始的,它工作得很好 <?php requi

我正在从头开始构建一个web应用程序,这是我第一次尝试这样做

从子目录中的with执行一次
require\u
时出现问题

文件夹结构:

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';
错误:

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'/class/'.$class.'.php'
这破坏了整个网站

我还尝试在我的
文件.php
中使用$directory=$\u SERVER['DOCUMENT\u ROOT']进行引用;执行
需要一次$directory./head.php'

我不知道我做错了什么

谢谢大家

我正在从头开始构建一个web应用程序,这是我第一次尝试这样做

既然你正在建设新网站,你应该遵循的具体的。已经有与PSR-0/4兼容的自动加载器,但您可以将此作业留给

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

spl_autoload_register(function ($class) {
    require_once __DIR__.'/../classes/'.$class.'.php';
});
\uuuu DIR\uuuu
是一个神奇常数,在本例中表示
init.php的目录的绝对路径

我正在从头开始构建一个web应用程序,这是我第一次尝试这样做

既然你正在建设新网站,你应该遵循的具体的。已经有与PSR-0/4兼容的自动加载器,但您可以将此作业留给

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

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

\uuuu DIR\uuuu
是一个神奇常数,在这种情况下表示
init.php的目录的绝对路径

问题可能是
当前工作目录
-请参见
getcwd()
与PHP文件不同-请参见
\uuuuu DIR\uuuuu
。相对路径基于
当前工作目录
而不是
\uuuuu目录
。如回答中所述-最好始终使用绝对路径。问题可能是
当前工作目录
-请参阅
getcwd()
与PHP文件不同-请参见
\uuuuu DIR\uuuuu
。相对路径基于
当前工作目录
而不是
\uuuuu目录
。正如答案中提到的,最好始终使用绝对路径。