가장 일반적인 문제 중 하나는 다음과 같습니다. SPL_AUTOLOAD_REGISTER는 올바르게 호출되지 않거나 다른 곳에서 덮어 씁니다. 예를 들어, 여러 개의 자동 로더가 주문 오류에 등록되면 일부 클래스는 찾을 수 없습니다.
<?php
spl_autoload_register(function ($class) {
include __DIR__ . '/classes/' . $class . '.php';
});
이 익명 기능이 등록되고 실행되었는지 확인하십시오. spl_autoload_functions () 를 통해 현재 등록 된 자동 부로 함수 목록을 확인할 수 있습니다.
네임 스페이스를 사용하는 경우 클래스 이름에는 백 슬래시 (\)가 포함되어 있으며 파일 경로 해상도에서 올바르게 대체되지 않으므로 파일을 찾을 수 있습니다.
<?php
spl_autoload_register(function ($class) {
$path = __DIR__ . '/src/' . str_replace('\\', '/', $class) . '.php';
require $path;
});
참고 : str_replace ( '\\', '/', $ class)를 사용하여 네임 스페이스를 디렉토리 경로로 변환해야합니다.
Linux와 같은 Case-Sensitive 파일 시스템의 경우 클래스 이름의 경우는 파일 이름과 정확히 일치해야합니다. Windows (Case Insensitive)에서 개발하여 Linux에 배포하는 경우 클래스가 찾을 수없는 오류가 발생할 수 있습니다.
PSR-4 이름 지정 사양을 균일하게 사용하고 이러한 문제를 피하기 위해 Composer Automatic Loading을 사용하는 것이 좋습니다.
또 다른 일반적인 이유는 경로 오류 또는 루트 디렉토리 오류입니다. 예를 들어, 프로젝트 구조가 변경된 후 다음 경로 스 플라이 싱 방법이 실패 할 수 있습니다.
require 'classes/' . $class . '.php';
더 강력한 방법은 절대 경로를 사용하는 것입니다.
require __DIR__ . '/classes/' . $class . '.php';
또는 realpath ()를 사용하여 경로가 존재하는지 확인하십시오.
자동로드 로직이 정확하더라도 대상 클래스 파일 자체가 존재하지 않거나 올바르게 생성되지 않으면 자동 로더는 자연스럽게 클래스를로드 할 수 없습니다. 현재 비슷한 방식으로 디버깅하는 것이 매우 도움이됩니다.
<?php
spl_autoload_register(function ($class) {
$file = __DIR__ . '/classes/' . $class . '.php';
if (!file_exists($file)) {
error_log("Autoload failed: $file not found");
}
require $file;
});
작곡가 (권장 방법)를 통해 자동로드를 관리하는 경우 다음을 확인해야합니다.
Composer Dump-Autoload 가 실행되어 공급 업체/Autoload.php가 최신 상태인지 확인합니다.
'공급 업체/autoload.php'가 필요합니다. 올바르게 호출되고 경로가 정확합니다.
<?php
require __DIR__ . '/vendor/autoload.php';
프로젝트의 https://gitbox.net/vendor/autoload.php 에 액세스하여 파일이 올바르게 배포되었는지 확인할 수 있습니다.