Buongiorno a tutti, ho questo problema, non riesco a far funzionare il mio vecchio file ClassAutoloader.php con la nuova configurazione del server.
ROOT\ --> libs/
|
classes/
connetti.class.php
....
ClassAutoloader.php
index.php
....
Il codice di ClassAutoloader.php
il codice di index.php
la classe generica connetti.class.php che si trova in libs/classes/
in index.php ho anche provato a inserire un inclusione diretta al file con
include_once __DIR__ . '/libs/classes/connetti.class.php';
ma niente, sempre lo stesso errore.
Questo il percorso al file elaborato da ClassAutoloader C:\apache\users\marco\ambasciate/libs/classes/connetti.class.php la root è ambasciate
Questo è l'errore come definito da XDebug:
ROOT\ --> libs/
|
classes/
connetti.class.php
....
ClassAutoloader.php
index.php
....
Il codice di ClassAutoloader.php
PHP:
<?php declare(strict_types=1);
/**
* ClassAutoload esegue l'autoload per le classi
*
* @author Marco Grazia
*/
class ClassAutoloader
{
/**
* Carica la classe quando richiamata e la registra nell'elenco delle classi attiva
*
* @param string $className
*/
public static function loaderClasses(string $className) {
$file = __DIR__ . '/libs/classes/' . strtolower(str_replace("\\", "/", $className)) . '.class.php';
echo $file . '<br>';
if ( file_exists($file) && is_readable($file))
require_once $file;
}
}
spl_autoload_extensions('.php');
spl_autoload_register( __NAMESPACE__ . '\\ClassAutoloader::loaderClasses' );
il codice di index.php
PHP:
<?php declare(strict_types=1);
try {
include_once __DIR__ . '/ClassAutoloader.php';
$pdo = new Connetti(); // <<--<< ERRORE DI CLASSE NON TROVATA, MA IL PERCORSO E' GIUSTO :(
}
catch (Exception $e ) {
echo $e->getMessage();
}
?>
la classe generica connetti.class.php che si trova in libs/classes/
PHP:
<?php declare(strict_types=1);
namespace libs\classes;
/**
*
* @author marco.grazia
*
* La Classe Connetti, conette ad un database MariaDB/MySQL
*/
class Connetti
{
/**
* Handle della connessione
*/
public $pdo = null;
/**
* Nome del database
*/
private string $database = '';
/**
* Username
*/
private string $username = '^_^';
/**
* Password per il database
*/
private string $password = 'baubaumiciomicio';
/**
* Metodo iniziale della classe.
*
* @param string $database con valore predefinito.
*/
public function __construct (string $database = 'hahaha')
{
$this->database = $database;
$dsn = 'mysql:host=localhost;dbname=' . $this->database . ';charset=utf8mb4';
$options = [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::ATTR_EMULATE_PREPARES => false,
];
try {
$this->pdo = new \PDO($dsn, $this->username, $this->password, $options);
} catch (\PDOException $e) {
throw new \PDOException($e->getMessage(), (int)$e->getCode());
}
}
/**
* Quando la classe viene dichiarata null, tutto viene cancellato e la memoria liberata.
*/
function __destruct ()
{
if (!is_null($this->pdo)) {
$this->pdo = null;
$this->database = '';
}
}
}
include_once __DIR__ . '/libs/classes/connetti.class.php';
ma niente, sempre lo stesso errore.
Questo il percorso al file elaborato da ClassAutoloader C:\apache\users\marco\ambasciate/libs/classes/connetti.class.php la root è ambasciate
Questo è l'errore come definito da XDebug:
# | Time | Memory | Function | Location |
---|---|---|---|---|
Call Stack | ||||
( ! ) Error: Class 'Connetti' not found in C:\apache\users\marco\ambasciate\index.php on line 28 | ||||
Fatal error: Uncaught Error: Class 'Connetti' not found in C:\apache\users\marco\ambasciate\index.php on line 28 | ||||
1 | 0.0009 | 411528 | {main}( ) | ...\index.php:0 |