Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    Percorsi Relativi Pazzi

    Ho un tree di file di questo tipo:

    [root]/_librerie/set1/uf_header.php
    [root]/_librerie/set1/lib1.1.php
    [root]/_librerie/generica.php
    [root]/_applicazioni/applicazione1/index.php


    Faccio un include da _applicazioni/applicazione1/index.php:
    codice:
     include("../../_librerie/set1/uf_header.php"); // Funziona
    nel file uf_header c'è scritto:
    codice:
     require_once 'libreria1-1.php';  // Funziona nonostante ...
    echo $_SERVER['PHP_SELF']; // ...qui scriva: /_applicazioni/applicazione1/index.php
    Boh, questo è strano. Ma visto che funziona vado avanti.

    Voglio includere anche [root]/_librerie/generica.php, allora scrivo
    codice:
     require_once '../generica.php';  // Non Funziona! Anche se il percorso relativo deve essere giusto. come dimostra il fatto che il require precedente funziona!!
    Le ho provate tutte... L'unica è copiare la libreria generica nello stesso path di
    codice:
     [root]/_librerie/set1/lib1.1.php
    e fare un include/require generica.php (senza ../)... allora funziona.
    Non so più cosa fare, generica la voglio lasciare là perché vorrebbe essere condivisa
    anche da altre librerie!

    Qualcuno ha avuto questo problema o riesc a capire cosa non sto considerando?
    Vi ringrazio infinitamente.

  2. #2

    Risposta

    MI rispondo da solo, spero che possa essere utile a qualcuno:

    Per via sperimentale ho notato che se come parametro di include si usa il nome di un file nella stessa cartella o in una sottocartella va tutto come previsto.
    Se invece si usano link simbolici (./, ../, ...) viene utilizzato il path del primo file che comincia le inclusioni!!

    Questa cosa non l'ho trovata documentata, infatti si legge in php.net

    If a path is defined (full or relative), the include_path will be ignored altogether. For example, if a filename begins with ../, the parser will look in the parent directory to find the requested file.

    E nient'altro.
    Boh.

    Se qualcuno scopre che non sto tenendo conto di qualcosa ditemi perfavore.
    Grazie mille ancora

  3. #3

  4. #4
    Utente di HTML.it L'avatar di bubi1
    Registrato dal
    Dec 2009
    Messaggi
    1,230
    Questa cosa non l'ho trovata documentata, infatti si legge in php.net

    If a path is defined (full or relative), the include_path will be ignored altogether. For example, if a filename begins with ../, the parser will look in the parent directory to find the requested file.
    eh? credo tu non abbia capito quella frase. Dice semplicemente che se tu chiami include("path/to/file.php") - includera' il file ignorando il percorso specificato nell'impostazione globale di sistema include_path. Se tu invece chiamassi include("file.php") (senza specificare nessun path) - il sistema lo cercherebbe anche nel include_path, e poi nella cartella corrente.

    Per quanto riguarda il resto - stai facendo dei banali errori, quindi usa il metodo che ti e' stato suggerito sopra

  5. #5

    Perfetto

    Credo di averne preso testa.
    Inizialmente il comportamento mi è sembrato poco intuitivo.

    Dal link che ha consigliato Filippo:

    Nelle nuove versioni di PHP, a furor di popolo, è stata introdotta la costante magica __DIR__ che fa riferimento alla directory in cui si trova il file corrente in modo da poterla utilizzare al posto di dirname(__FILE__).
    E' proprio quello che cercavo!
    Grazie mille degli ottimi consigli!!


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.