Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it L'avatar di Marcolino's
    Registrato dal
    May 2003
    residenza
    Udine
    Messaggi
    3,606

    Banalmente percorsi directory e include

    Ciao, questo il problema.

    I siti della LAN dove lavoro sono strutturati in questo modo:
    ROOT
    CSS
    JS
    LIBS
    -------CLASSES
    -------CONFIG
    EXT
    Quindi in ROOT ci sono i file principali, come index e autoloader.php
    In LIBS/CLASSES le classi, in LIBS/CONFIG/file di configurazione
    e infine in EXT file come ad esempio programmi chiamati tramite javascript/ajax e altro.

    E qui sta il problema:
    in particolare c'è un file che ho chiatao getNomiFirma.php che è appunto nella cartella EXT/ che richiama dal database alcuni nomi di clienti e che tramite json vengono trasmessi al suggeritore di un form.
    Ora per farlo funzionare ho bisogno di alcuni file che si trovano in LIBS/CLASSES come la classe Connetti che richiama una connessione al database e la classe Verifica che verifica quanto inserito.
    Per farlo utilizzo autoloader.php che si trova in ROOT.

    Le chiamate avvengono in PHP tramite include_once
    Codice PHP:
    // file: EXT/getNomiFirma.php
    include_once __DIR__ '/../autoloader.php';
    .... 
    non viene generato nessun errore relativo alla chiamata del file esterno, ma appena chiamo una qualsiasi classe mi genera un errore di classe non trovata.

    Il file autoloader.php
    Codice PHP:
    class ClassAutoloader{
    public static function 
    loaderClassesstring $ClassName ) {
            
    $ClassFile __DIR__ '/libs/classes/' str_replace('\/_\\'DIRECTORY_SEPARATORstrtolower$ClassName ) ) . '.class.php';
            if ( 
    file_exists$ClassFile ) && is_readable$ClassFile ) )
                require ( 
    $ClassFile );
            }
    }
    spl_autoload_extensions('.class.php');
    spl_autoload_register__NAMESPACE__ '\\ClassAutoloader::loaderClasses' ); 
    Errore specifico:
    Warning: array_walk_recursive() expects parameter 2 to be a valid callback, function 'trimValue' not found or invalid function name in C:\apache\users\marco\apoleg-3\ext\getNomiFirma.php on line 33
    in particolare la riga 33 richiama una classe di verifica:
    Codice PHP:

    array_walk_recursive
    ($_GET'trimValue');  //  Trimming 
    trimValue() che pulisce l'input.

    Ora è chiaro che è un problema di percorsi.
    autoloader.php se chiamato da ROOT/ funziona perfettamente, ma se come in questo caso lo richiamo da una directory interna a ROOT va in tilt e non so come risolvere.

    Riuscite a darmi una mano?
    Grazie.


  2. #2
    Dove viene definita la funzione
    Codice PHP:
    trimValue() 

  3. #3
    Utente di HTML.it L'avatar di Marcolino's
    Registrato dal
    May 2003
    residenza
    Udine
    Messaggi
    3,606
    Mi pareva di averlo detto, comunque è un metodo di una classe di verifica che si trova in /libs/classes

    In pratica parafrasando il file di partenza, si trova in una cartella della root e quindi la ricerca della classe parte da quella cartella, torna indietro ed entra in libs/classes dove troverà la classe cercata.

    Se faccio una chiamata alla stessa classe da root tutto funziona perfettamente, ma se la faccio da dentro un'altra cartella non la trova più.
    E' chiaramente un problema di percorsi.

    Potrei utilizzare un sistema simile a quello che utilizzano i filesystem ,cioè con un file di configurazione che ha all'interno una serie di path preregistrati e che utilizzo per richiamare gli altri pezzi del sito (classi, css, javascript, immagini, eccetera) ma mi pare una cosa inutilmente complicata.

    D'altronde tutta la questione potrei risolverla mettendo all'inizio di ogni file php, una serie di include che richiamano la o le classi che mi servono e risolvo, ma volevo essere più dinamico ed elegante chiamando un file php che mi registra le classi, ma vedo che funziona in modo diverso da come me l'aspettavo.
    Ultima modifica di Marcolino's; 30-06-2023 a 08:57

  4. #4
    Il seguente codice si aspetta che trimValue sia una funzione, non che sia il metodo di una classe.

    array_walk_recursive($_GET, 'trimValue'); // Trimming

  5. #5
    Utente di HTML.it L'avatar di Marcolino's
    Registrato dal
    May 2003
    residenza
    Udine
    Messaggi
    3,606
    Sì accidenti, ho fatto tutte le prove possibili e i percorsi del filesystem erano perfettamente rispettati, ho riprstinato pure l'autoloader e funziona benissimo.
    Il problema sono le 4 ore dormite questa notte.

    Sì Filippo hai ragione tu, mi ero dimenticato di richiamare la classe nella chiamata, ora funziona perfettamente.
    Codice PHP:
    array_walk_recursive($_GET'Verifica::trimValue');  //  Trimming 
    Va bè grazie comunque.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.