PHP Classes

File: base/config/autoload.php

Recommend this page to a friend!
  Classes of Carlos Eduardo Barcelos Amaral   Base MVC Framework   base/config/autoload.php   Download  
File: base/config/autoload.php
Role: Auxiliary script
Content type: text/plain
Description: Auxiliary script
Class: Base MVC Framework
MVC framework to be the base of Web applications
Author: By
Last change: Apply changes

Date: 6 years ago
Size: 4,036 bytes
 

Contents

Class file image Download
<?php

//require_once CORE . 'exception' . DS . 'systemexception.class.php';


$autoloadlog = '';


function
search_lib($lib, $file, $ds = '/'){
  
// Verifica se o diretório informado é válido
  
global $autoloadlog;

   if (
is_array($lib)){
      foreach (
$lib as $dir) {
         if (
$f = search_lib($dir, $file, $ds)){
            return
$f;
            break;
         }
      }
      return
FALSE;
   }

   if (
is_dir($lib)){
     
$path = isset($path) ? $path : "";
     
$path = cleanPath($lib, $path, $ds);

     
$autoloadlog .= 'Lib: ' . (is_array($lib) ? implode(', ', $lib) : $lib) . PHP_EOL .
        
'File: ' . $file . PHP_EOL . PHP_EOL .
        
'Path: ' . $path . PHP_EOL . PHP_EOL .
         (
file_exists($path) ? 'EXISTS!' : 'NOT Exists!') . PHP_EOL . PHP_EOL .
        
str_repeat('-', 200) . PHP_EOL . PHP_EOL;


     
// Verifica se o arquivo já existe neste primeiro diretório
     
if (file_exists($path))
         return
$path;

     
// Lista os subdiretórios e arquivos
     
$dirs = array_diff(scandir($lib, 1), ['.','..']);
      foreach (
$dirs as $dir) {

        
// Verifica se é um arquivo se for, pula para o próximo
        
if (!is_dir($lib.$ds.$dir)) continue;

        
// Se for um diretório procura dentro dele
        
$f = search_lib($lib.$ds.$dir, $file, $ds);

        
// Caso não encontre retora FALSE
        
if ($f !== FALSE) return $f;
      }

   } else
     
$autoloadlog .= 'Lib "'. $lib .'" is not a dir.'.PHP_EOL.PHP_EOL;

  
// Se o diretório informado não for válido ou se não tiver encontrado retorna FALSE
  
return FALSE;
}


function
cleanPath($lib, $file, $ds = '/') {
  
$lib = rtrim($lib, '/\\');

  
$path = strtolower($lib.$ds.$file);
  
$path = str_replace(['\\', '/'], $ds, $path);

   return
$path;
}

spl_autoload_register(
   function (
$class){
      global
$autoloadlog;

     
$libs = [BASE];

      if (
defined('APP'))
        
$libs[] = APP;

      if (
defined('SOURCES'))
        
$libs = array_merge($libs, (gettype(SOURCES) == 'array' ? SOURCES : [SOURCES]));
     

     
$ext = '.class.php';
     
$debug = !TRUE;

     
$file = FALSE;

     
$autoloadlog .= '<h3>'.$class.'</h3>';

      foreach (
$libs as $lib) {
        
$path = cleanPath($lib, $class.$ext, DIRECTORY_SEPARATOR);

        
/*
         $autoloadlog .= '<pre>Lib: ' . (is_array($lib) ? implode(', ', $lib) : $lib) . PHP_EOL .
                        'File: ' . $class.$ext . PHP_EOL . PHP_EOL .
                        'Path: ' . $path . PHP_EOL . PHP_EOL .
                        (file_exists($lib.$class.$ext) ? 'EXISTS!' : 'NOT exists!') . PHP_EOL .
                        'BackTrace: ' . var_export(debug_backtrace(), true) . PHP_EOL . PHP_EOL .
                        str_repeat('-', 200) . PHP_EOL . PHP_EOL.'</pre>';
         */


        
if (file_exists($path)){
           
$file = $path;
            break;
         }
      }

     
//$file = search_lib($libs, $class.$ext);

      // Debug
     
if ($debug) echo $autoloadlog;

     
// Se encontrou inclui o arquivo
     
if ($file !== FALSE && is_string($file) && $file !== '') {

         require_once
$file;

         if (!
class_exists($class, FALSE)){
           
//trigger_error('Autoload error: File loaded, but class not found.' , E_USER_ERROR);
            //throw new \Core\Exception\SystemException(\Core\Exception\Exceptions::E_CLASSNOTEXIST, [$class]);
            //throw new Exception("Autoload error: File loaded, but class '{$class}' not found.");
        
}

      } else {
// Se não encontrar o arquivo lança um erro na tela. :)

        
if (is_array($libs)) $libs = implode($class.$ext . '</code>, <code>', $libs);

        
//trigger_error("Autoload error: Can't find the file {$class}{$ext} on [{$libs}]!" , E_USER_ERROR);
         //throw new \Core\Exception\SystemException(\Core\Exception\Exceptions::E_FILENOTFOUND, ["<code>{$libs}".$class.$ext."</code>"]);
         //throw new Exception("Autoload error: Can't find the file {$class}{$ext} on [{$libs}]!");
     
}

   }
);