Newsgroup: it.comp.www.php
Titolo: $_SERVER['DOCUMENT_ROOT'] e $_SERVER['HTTP_HOST']

Ciao a tutti,
ho un problema nel rilevare la root del mio sito, mi spiego meglio.
Se uso la forma:
$url="http://".$_SERVER['HTTP_HOST']."/miapagina.php";
tutto funziona, pero' l'url risulta essere assoluto e quindi viene "visto"
come se fosse esterno al mio sito (problemi di sicurezza con le sessioni),
mentre se uso la forma:
$url=$_SERVER['DOCUMENT_ROOT'].'/miapagina.php';
quando vado a premere sul link lo crea come se fosse
www.miosito.it/dir/dir/miapagina.php
 anziche' semplicemente
www.miosito.it/miapagina.php
A tal proposito ho notato che effettivamente $_SERVER['DOCUMENT_ROOT'] e'
nella forma /dir/dir, pero' se uso
include_once($_SERVER['DOCUMENT_ROOT'].'/include/miofile.php'); lo include
come se effettivamente lo vedesse nella sottocartella /include/ della
radice.
Spero di essermi spiegato, anche se effettivamente il concetto non e' dei
piu' semplici.
Grazie mille in anticipo a chi avra' voglia di darmi una mano.
Chefesta
--------------------------------
Inviato via 
http://usenet.libero.it

 include_once($_SERVER['DOCUMENT_ROOT'].'/include/miofile.php');
Questo invece è un altro discorso: includere un file è diverso da
richiederlo via http, ed è un'operazione che avviene sul server, per cui hai
bisogno dell'indirizzo di quel file...
Spero di aver capito la domanda :) e di essere stato chiaro
DkS

 DkS
Il problema non e' la tua chiarezza quanto la mia ignoranza...
Potresti rispiegarmi i concetti? Grazie.


L'http document root e' la cartella radice dove risiedono tutti i file
accessibili via HTTP e interpretati da Apache. E' ovvio che non puo' essere
accessibile tutta la root del disco per questioni di sicurezza...
Apache non e' altro che un server che risponde ad una richiesta su una porta
inviando una pagina richiesta tra quelle presenti nella cartella designata
ad essere la doc root.
Quindi 
http://tuoserver
 == /root/dir/.../
Ma il parametro di accesso al disco attraverso non e' di tipo filesystem in
cui puoi prendere i file, copiarli, cancellarli, etc. bensì mediato dal
demone httpd, che interpreta le pagine. Quindi non accedi mai al file, ma è
apache a farlo per il tuo client (il browser).
Se non interpretasse, attraverso il modulo php, le tue pagine .php chiunque
potrebbe vedere il codice che hai scritto. Questo è un motivo per cui non
puoi includere se fai una richiesta http, sarebbe una grossa vulnerabilita'
altrimenti!
Girando sul server il tuo script però può accedere direttamente al file
system con i privilegi dell'utente apache, e quindi puoi farci operazione di
tipo include e molto altro ancora :)

Il mio problema non e' quello di accedere alla root del disco, ma la root
del mio spazio. Per farmi capire, se metto un link con /nomepagina.php
funziona.
Effettivamente nomepagina.php si trova nella "root" del mio spazio su disco
ed e' accessibile via brower digitando 
www.nomedominio.it/nomepagina.php
Pero' non funziona se uso le immagini, precisamente se uso getimagesize ecco
un esempio...
<?php
$cartellaimages="/images/";
$size = getimagesize ($cartellaimages."dir/immagine.gif");
echo '<img src="'.$cartellaimages.'dir/immagine.gif" '.$size[3].' >';
?>
In questo caso mi visualizza l'immagine pero' mi ritorna questo warning:
Warning: getimagesize: Unable to open '/images/dir/immagine.gif' for
reading. in /dir1/dir2/dir3/dir4/nomefile.php on line 11
In cui dir2/dir3 corrispondono a cio' che trovo in $DOCUMENT_ROOT
dir4 e' una sottodirectory che ho nel sito
dir1 mi restituisce home
Sul manuale php la descrizione di getimagesize dice che e' possibile sia
usare nomefile o url... ma come? Solo nomi file relativi? Solo path
assoluti?... :-(
Sara' il caldo o solo la mia ignoranza in materia ma non riesco ad uscirne
sano... 8-(
Grazie per la pazienza e per l'aiuto.


 reading. in /dir1/dir2/dir3/dir4/nomefile.php on line 11
Se si escludono le soluzioni logiche di un problema, quelle illogiche, per
quanto improbabili, sono quelle vere :)
sei sicuro che sia quello il percorso della tua immagine? (quel /dir/ mi
convince poco!)
Altrimenti per getimagesize puoi passare anche un url, vedi le info
dettagliate sul manuale:
http://www.php.it/manual/it/function.getimagesize.php


Il manuale lo avevo gia' spulciato, il mio problema permane. Optero' per
utilizzare un url all'interno della funzione getimagesize anziche' un
percorso al file, anche se cio' non mi quadra molto. (Perche' con il link
all'immagine funge e in getimagesize no?... Boh?...) ;-(
Grazie mille comunque.
Buon lavoro.



Non proprio "spulciato". ;-)
Dalla documentazione ufficiale:
"...If accessing the filename image is impossible, or if it isn't a valid
picture, getimagesize() will return FALSE and generate a warning."
Alla luce di questo dato, forse č bene dare un'occhiata ai permessi del
file, piů che al path!
pbgiorno
--
Fame is a bee.
It has a song.
It has a sting.
Ah, too, it has a wing.
              (Emily Dickinson)


Per quel che riguarda la possibilita' di avere warning la avevo letta nel
manuale, il mio problema e' che il path e' corretto e che l'immagine ha di
sicuro i permessi di lettura, infatti viene visualizzata correttamente (per
l'esattezza l'immagine ha i permessi 664).
Devo darle qualche altro permesso? Non credo getimagesize necessiti di
ottenere accesso in scrittura o in esecuzione...
Inoltre con questo path accedo senza problemi all'immagine:
$MYROOT="http://".$_SERVER['HTTP_HOST']."/";
$cartellaimages_size=$MYROOT."dir/";
$size = getimagesize ($cartellaimages_size."dir/immagine.gif");
mentre se uso semplicemente...
$cartellaimages_size="/dir/";
nei link all'immagine funziona mentre in getimagesize no.
Spero di essermi spiegato meglio.
Grazie comunque per la dritta dei permessi. Se pero' puoi darmi indicazioni
piu' precise su come dovrei settarli mi saresti di aiuto.
Buona giornata.


 $cartellaimages_size="/dir/";
Ah, allora è chiaro il motivo:
la funzione accetta percorsi fisici o url...
nel path     /dir/immagine.gif    lo slash iniziale viene considerato come
root di sistema (path fisico in ambiente linux) piuttosto che come document
root del web server.



La riflessione sorge spontanea... ma allora o il manuale e' "lacunoso"
oppure la funzione dovrebbe comportarsi diversamente, e cioe' dovrebbe
essere in grado di ripescare la document root... o sbaglio?
Anche perche' cosi' si devono usare due path differenti, uno da "dare in
pasto" alla getimagesize() e l'altro da utilizzare nel link alle immagini
(per evitare di dare url come link a immagini, ovviamente)
Inoltre avrei rotto meno le scatole al NG scervellandomi sulle possibili e
impossibili soluzioni al mio problema... :-)
Grazie mille.
