-/ (root) con diversi file
-/classi/
-/includes/
-/area_ris/
-/foto/
-/schede/
Il mio problema è che all'interno di una classe (contenuta nella
cartella "classi") sono presenti due costanti con due percorsi a
cartelle del sito scritte in questo modo:
private $img_dir = "./foto";
private $pdf_dir = "./schede";
Il problema è che scrivendo questo riesco ad utilizzare questi path
quando creo degli oggetti in file della root, ma se ad esempio devo
usare degli oggetti all'interno della cartella "area_ris" dovrei usare
il percorso ../foto o ../schede
C'è un modo "furbo" per poter creare un path che sia SEMPRE quello per
qualsiasi caso??
Saluti!
> C'è un modo "furbo" per poter creare un path che sia SEMPRE quello
> per qualsiasi caso??
Ti suggerisco di provare la tecnica descritta in questo articolo:
Gestire le inclusioni di file in PHP
http://kb.creativepark.it/kb/entry/3/
--
Vuoi distribuire il tuo sito web su CD/DVD?
Prova http://www.dwebpro.com/
Vuoi diventare un esperto analista PHP/MySQL?
Vieni a fare uno stage con noi: http://www.creativepark.it/stage/
Ciao e grazie per il link, ma ancora non ci salto fuori.... non so come
implementare il tutto.
Ho provato ad es. così:
private $img_dir = dirname(__DIR__) . './foto';
ma addirittura ho un errore di sintassi....
> Ciao e grazie per il link, ma ancora non ci salto fuori.... non so
> come implementare il tutto.
>
> Ho provato ad es. così:
>
> private $img_dir = dirname(__DIR__) . './foto';
>
> ma addirittura ho un errore di sintassi....
Per prima cosa ti suggerisco di iniziare leggendo il manuale ufficiale:
http://www.php.net/manual/en/language.oop5.basic.php
The default value must be a constant expression, not (for example) a
variable, a class member or a function call.
Poi, per quale motivo hai scritto './foto' e non '/foto'?
Cavolo hai ragione... comunque questo problema l'ho risolto in modo
"pulito" con un metodo "setter" richiamato con il costruttore della classe:
private $img_dir = "";
[...]
function setImgPath() {
$this->img_dir = dirname(__DIR__) . '/foto';
}
>
> Poi, per quale motivo hai scritto './foto' e non '/foto'?
>
L'avevo fatto perchè all'interno della stessa classe ci sono vari metodi
che utilizzano questa cartella, ma il problema è che i file ove vengono
creati gli oggetti di questa classe sono in posizioni (cartelle) differenti.
Es:
-/ (root)
-/foto/
-/classi/ Database.class.php (questa è la classe)
-/area_ris/ pippo.php (qui viene creato un oggetto di tipo Database)
-/gallery.php (file nella root principale dove viene creato un altro
oggetto di tipo Database)
Qui: se devo accedere alla cartella "foto" da gallery.php la variabile
della classe dovrà essere
private $pdf_dir = "/foto";
mase devo accedere da un file contenuto in /area_ris/ invece la
variabile sarà:
private $img_dir = "../foto";
in quanto deve "tornare indietro" di una directory.
E' questo che mi fa perdere il lume della ragione :-)
> Cavolo hai ragione... comunque questo problema l'ho risolto in modo
> "pulito" con un metodo "setter" richiamato con il costruttore della
> classe:
Perche' non valorizzi $img_dir direttamente nel costruttore?
> L'avevo fatto perchè all'interno della stessa classe ci sono vari
> metodi che utilizzano questa cartella,
dirname() restituisce il nome della cartella, senza lo slash finale.
Questo che significa che se la classe e' salvata in /var/www/class.php,
il codice dirname(__FILE__) . './foto' restituisce il path
/var/www./foto, che non e' corretto (vedi il punto dopo www).
> -/ (root)
> -/foto/
> -/classi/ Database.class.php (questa è la classe)
> -/area_ris/ pippo.php (qui viene creato un oggetto di tipo Database)
> -/gallery.php (file nella root principale dove viene creato un altro
> oggetto di tipo Database)
>
> Qui: se devo accedere alla cartella "foto" da gallery.php la
> variabile della classe dovrà essere private $pdf_dir = "/foto";
>
> mase devo accedere da un file contenuto in /area_ris/ invece la
> variabile sarà: private $img_dir = "../foto";
>
> in quanto deve "tornare indietro" di una directory.
>
> E' questo che mi fa perdere il lume della ragione :-)
Se utilizzi dirname(__FILE__) come ti e' stato suggerito, NON dovrai
modificare il path a seconda del file che utilizza la classe. Dalla
struttura di directory che hai postato, dovrai utilizzare:
$this->img_dir = dirname(__FILE__) . '/../foto';
oppure
$this->img_dir = dirname(dirname(__FILE__)) . '/foto';
Nota bene, e' __FILE__ non __DIR__