Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Percorsi relativi ed assoluti.

1 view
Skip to first unread message

x-treme

unread,
Jul 23, 2008, 3:07:55 AM7/23/08
to
Salve a tutti. Ho una struttura di un sito fatto in questo modo:

-/ (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!

Filippo Toso - Creative Park

unread,
Jul 23, 2008, 3:57:54 AM7/23/08
to
x-treme ha scritto:

> 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/

x-treme

unread,
Jul 23, 2008, 5:20:58 AM7/23/08
to
Filippo Toso - Creative Park ha scritto:

> x-treme ha scritto:
>
>> 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/
>

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....

Filippo Toso - Creative Park

unread,
Jul 23, 2008, 5:44:44 AM7/23/08
to
x-treme ha scritto:

> 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'?

x-treme

unread,
Jul 23, 2008, 6:03:16 AM7/23/08
to
Filippo Toso - Creative Park ha scritto:
> x-treme ha scritto:
>
>> 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.

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 :-)


Filippo Toso - Creative Park

unread,
Jul 23, 2008, 6:10:43 AM7/23/08
to
x-treme ha scritto:

> 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__

0 new messages