• User

    Grazie

    in pratica definisco nel programma principale la define path e questa la vedranno tutti programmi che aprirò ?

    mi fai sapere

    Grazie


  • User

    Ciao e grazie per avermi risposto.
    quidni se ho ben capito basterà scrivere nel programma iniziale questo :
    define('path1', './cartella1');

    e quindi il programma cercherà l'oggetto nella cartella1 ?

    In pratica se una cartella radice e tante sotto cartelle,

    cartella1
    --------- cartella2
    cartella3------------cartella4

    e richiamo ad esempio da un html pippo.php deve cercare pippo.php fino a trovarlo.

    Grazie in anticipo


  • User

    Forse non ho capito bene il tuo problema. Prova a spiegarmi con un esempio o copiando/incollando il codice da correggere/modificare. Se il tuo obiettivo è fare una ricerca di un file non sapendo dove si trova, puoi crearti una funzione ricorsiva che entra nelle varie sottocartelle fino a trovare il file. Se è questo il tuo problema, confermamelo e ti scrivo io la funzione...


  • User

    Ciao si confermo, quando viene richiamato un pippo.php deve percorrere tutte le cartelle fino a trovarlo.

    In pratica ho creato una cartella radice del progetto chiamata cartella_1

    cartella_1

    poi ho creato una cartella di nome tabelle , dove ho messo tutti i .php dei programmi che riguardano le tabelle.

    poi ho creato una cartella di nome applicazione1 dove ho messo tutti i .php dell'applicazione 1

    Ora dal menu richiamo i diversi php quindi deve cercarli fino a trovarli.

    Grazie


  • User

    Uhm, bruttina come cosa. Lenta soprattutto. Io provo a buttarti giù la funzione, magari controllala tu e vedi s'è corretta:

    [php] function find_file_in_dir($dirname, $file_name){
    if (!file_exists('./'.$dir_name.'/'.$file_name)) {
    $internal_dirs = scandir($dir_name);
    foreach ($internal_dirs AS $key => $internal_name) {
    if (is_dir('./'.$dir_name.'/'.$internal_name) && '.' != $internal_name && '..' != $internal_name) {
    if (file_exists('./'.$dir_name.'/'.$internal_name.'/'.$file_name)) {
    // IL FILE E' IN QUESTA DIR. VEDI TU SE TI BASTA TORNARE TRUE O SE VUOI TORNARE IL PERCORSO AL FILE CON return './'.$dir_name.'/'.$internal_name.'/'.$file_name;
    }
    }
    }
    return false;
    }
    } else {
    //IL FILE E' NELLA CARTELLA "RADICE" (return './'$dir_name.'/'.$file_name;)
    }
    }[/php]Per usarla basta che la chiami così:
    [php]
    if ($percorso_completo_al_file = find_file_in_dir('cartellaradice', 'nome_del_file.php')) {
    echo("File trovato in:".$percorso_completo_al_file);
    } else {
    echo("File non trovato.");
    }
    [/php]Ci potrebbero essere errori perchè l'ho scritta al volo adesso. Controllala bene tu, comunque il principio è quello.


  • User

    Ciao Matteo , grazie della tua buona volontà, proverò la funzione.
    ma scusa , una domanda, ma nativamente in php non si può definire una path, con il percorso delle cartelle ?


  • User

    Ciao Matteo questo è il codice che sto provando.

    <?php
    define('path1', './init');
    include "path1/testa.php";
    include "c1_anazi_pag_1.php";
    //include "piede.php";

    ?>

    sto provando "define" da te inizialmente suggerito.

    in pratica devo richiamare testa.php che si trova nella cartella init iniziale.


  • User

    @pdecaro said:

    Ciao Matteo questo è il codice che sto provando.

    <?php
    define('path1', './init');
    include "path1/testa.php";
    include "c1_anazi_pag_1.php";
    //include "piede.php";

    ?>

    sto provando "define" da te inizialmente suggerito.

    in pratica devo richiamare testa.php che si trova nella cartella init iniziale.
    Se vuoi fare cosi devi scrivere:
    include path1.'/testa.php';

    Mi raccomando, path1 senza dollari o virgolette. Scrivilo così com'è. I define funzionano così.

    Ciao!


  • User

    scusa Matteo sono entrato nuovamente nel problema in oggetto.

    dopo avere definito la path, ho provato cosi , ma non funziona ?

    programma ?

    <?php
    define('path1', './init');
    include "path1/testa.php";

    ?>

    In alternativa sto provando la tua function, ma non funziona lo stesso ?

    Mi potresti aiutare.

    Grazie


  • User

    Ciao Matteo sto usando la tua funzione ma mi genera questo errore .
    Puoi darci un'occhiata . Grazie
    Warning: scandir() [function.scandir]: (errno 2): No such file or directory in C:\Programmi\xampp\htdocs\cercatrova\trova.php on line 9

    Warning: Invalid argument supplied for foreach() in C:\Programmi\xampp\htdocs\cercatrova\trova.php on line 10
    File non trovato.

    Ti allego il sorgente

    <?

    function find_file_in_dir($dirname, $file_name){

    if (!file_exists('./'.$dir_name.'/'.$file_name)) {

    $internal_dirs = scandir($dir_name);
    foreach ($internal_dirs AS $key => $internal_name) {
    if (is_dir('./'.$dir_name.'/'.$internal_name) && '.' != $internal_name && '..' != $internal_name) {

               if (file_exists('./'.$dir_name.'/'.$internal_name.'/'.$file_name)) {
    

    // IL FILE E' IN QUESTA DIR. VEDI TU SE TI BASTA TORNARE TRUE O SE VUOI TORNARE IL PERCORSO AL FILE CON return './'.$dir_name.'/'.$internal_name.'/'.$file_name;
    }

           }
           
           
    
       return false;
    

    }

    } else {

    echo "IL FILE E NELLA CARTELLA RADICE (return './'$dir_name.'/'.$file_name;) ";
    }
    }

    ?>

    questo invece è il programma chiamante.

    <?
    include "trova.php";

    if ($percorso_completo_al_file = find_file_in_dir('cedolino', 'azcon_add_0.php')) {
    echo("File trovato in:".$percorso_completo_al_file);
    } else {
    echo("File non trovato.");
    }
    ?>