Newsgroup: it.comp.www.php
Titolo: "basename" di un url

URL parsing:
Se io ho un url, "
www.abcd.it
"
so benissimo che è "
http://www.abcd.it/
"
e con le funzioni php è facile ricavarlo.
ma se io ho "
www.abcd.it/efg/hij
"
come faccio a determinare (e a far determinare al php) se questo sia:
http://www.abcd.it/efg/hij
o
http://www.abcd.it/efg/hij/
La differenza è alta: 
nel primo caso si tratta di un file, e quindi la sua directory è
http://www.abcf.it/efg/
nel secondo caso si tratterà propio di una directory (e il file sarà
http://www.abcd.it/efg/hij/index.html
 o similari)
Il risultato non è scontato perchè io posso fare tranquillamente una
pagina html senza estensioni (farla vedere al browser poi è un'altra
cosa, però è secondario), ma soprattutto posso fare una directory con le
estensioni; nessuno mi vieta di chiamare una directory "index.html"
Il mio problema è questo: 
mi viene data una pagina con il suo corrispondente url; 
all'interno della pagina ci sono indirizzi relativi. Per calcolare
l'indirizzo assoluto, ho bisogno di scoprire la directory dove giace
quella pagina
Come si può fare?
Matteo
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

quella pagina
Questo sembra molto semplice. Ma puoi farmi un esempio?
Leonardo

 Questo sembra molto semplice. Ma puoi farmi un esempio?
mi vengono dati
a) 
http://docs.tesys-spa.it/linux/
b) 
http://docs.tesys-spa.it/linux/index.html
c) 
http://docs.tesys-spa.it/linux
Che sono la stessa pagina.
Il primo link al suo interno è:
<a href="AppuntiLinux/index.html">
Io devo andare a finire in 
http://docs.tesys-spa.it/linux/AppuntiLinux/index.html
sia che mi venga dato a) b) o c)
i primi due casi li ho risolti in un passaggio così:
$app=strrpos($url,"/");
$link=substr($url,0,$dir+1).$link;
In cui $link è "AppuntiLinux/index.html" e $url è a) o b) 
per c) ho pensato questo:
poichè $url lo apro con fopen, potrei vedere se 
fopen("
http://docs.tesys-spa.it/linux
","r") e
fopen("
http://docs.tesys-spa.it/linux/
","r")
sono la stessa pagina.
Quello che mi preoccupa è se 
http://docs.tesys-spa.it/linux/
dovesse corrispondere a 
http://docs.tesys-spa.it/linux/index.php
Questa può essere una pagina dinamica con dentro per esempio un 
contatore. 
Risultato: 
http://docs.tesys-spa.it/linux
 sarebbe diversa da 
http://docs.tesys-spa.it/linux/
, sicché il mio programma prenderebbe un
granchio.
L'ultima drastica soluzione (quella adottata per il momento) è dare per
supposto che quello che mi forniscono che finisce per / sarà una
directory; senza, invece è un file (ovvio che non è completamente
reale).
Dopo penso di implementare una funzione più avanzata (appena un po' più
reale) che verifica, nel caso che l'url non finisca per /, se l'url sia
con /nome.qualcosa o meno, e considerare il primo caso come pagina web e
il secondo caso come directory.


 $link=substr($url,0,$dir+1).$link;
pardon,
$app=strrpos($url,"/");
$link=substr($url,0,$app+1).$link;


:
L'unica cosa che puoi fare e' leggere la pagina esplicitamente, usando CURL
oppure il protocollo HTTP con fsockopen(). Cosi', puoi recuperare lo header
"Location" o il codice di errore 301:
http://docs.tesys-spa.it/linux
da' "301 Moved Permanently: Location: 
http://docs.tesys-spa.it/linux/
"
E sai che ...linux e ...linux/ sono la stessa pagina.
Leonardo
-- 
Time's angles, mages tell, conceal a place
incredible, beyond the mundane mind;
night-shrouded and between the seas of space
dread creatures drift in the ageless winds.