Newsgroup: it.comp.www.php
Titolo: file_exists (corsi e ricorsi storici)

Tempo fa, invano, ho cercato di risolvere un problema.
Questo:
"vorrei sapere se il file 
http://www.salvatorepaci.it/sopra.jpg
 esiste o 
meno"
Sto parlando di un percorso del tipo http://..... e non di un percorso 
relativo alle cartelle del server nel quale si trova lo script.
come fare?

> come fare?
Ecco la risposta, copiata spudoratamente dal manuale :-)
function url_exists($url)
{
   $handle = @fopen($url, "r");
   if ($handle === false) return false;
   fclose($handle);
   return true;
}
Sul manuale (sempre alla voce file_exist) ci sono altre funzioni più 
complesse per verificare l'esistenza di file remoti.
Enjoy it. :-)
--
rob4you

 (php4) non funziona.
Non è un problema di versione di PHP, ma semplicemente su Tiscali non 
hai allow_url_fopen abilitato.
Puoi provare un'altra funzione, un po' più complessa, rubata anch'essa 
al manuale :-)
function url_exists($url) {
$a_url = parse_url($url);
if (!isset($a_url['port'])) $a_url['port'] = 80;
$errno = 0;
$errstr = '';
$timeout = 30;
if(isset($a_url['host']) && 
$a_url['host']!=gethostbyname($a_url['host'])){
$fid = fsockopen($a_url['host'], $a_url['port'], $errno, $errstr, 
$timeout);
if (!$fid) return false;
$page = isset($a_url['path'])  ?$a_url['path']:'';
$page .= isset($a_url['query'])?'?'.$a_url['query']:'';
fputs($fid, 'HEAD '.$page.' HTTP/1.0'."\r\n".'Host: 
'.$a_url['host']."\r\n\r\n");
$head = fread($fid, 4096);
fclose($fid);
return preg_match('#^HTTP/.*\s+[200|302]+\s#i', $head);
} else {
return false;
}
}
--
rob4you

 function url_exists($url) {
--------------------
Warning: fsockopen() [function.fsockopen]: unable to connect to 
www.salvatorepaci.it:80
 in 
/rootdomain/it/s/a/
salvatorepaci.it/public_html/esiste.php
 on line 11
bool(false)
:(((((((((((((((( 

Salvatore Paci ha scritto:

Ciao,
tempo fa qualcun altro aveva postato la stessa domanda ed io rispondo 
allo stesso modo:
puoi trovare qui 
http://setecastronomy.redirectme.net/index.php?page=functions&type=detail&IDContent=11
una funzione scritta apposta dal mitico Setec Astronomy.
Saluti

 
www.salvatorepaci.it:80
 
Io ho provato l'ultima funzione che ti ho segnalato e ho controllato 
cosa restituiva con un var_dump:
var_dump(url_exists("
http://www.salvatorepaci.it/sopra.jpg
"));
Mi restituisce:
int(1)
Se provo invece a mettere un indirizzo inesistente (tipo "sotto.jpg" 
anziché "sopra.jpg"), mi restituisce giustamente:
int(0)
Non so esserti d'aiuto più di tanto. Probabilmente, supponendo che sia 
giusto tutto il resto, è un problema di Tiscali, ma non ne sono affatto 
convinto. :-)
--
rob4you

 una funzione scritta apposta dal mitico Setec Astronomy.
--------------
Al primo tentativo avevo messo un'immagine esistente e, dopo circa 20 
secondi di attesa mi aveva scritto
Warning: fsockopen() [function.fsockopen]: unable to connect to 
www.salvatorepaci.it:80
 in 
/rootdomain/it/s/a/
salvatorepaci.it/public_html/esiste.php
 on line 22
http://www.salvatorepaci.it/sopra.jpg
 file exists!
poi ho messo un url inesistente e dopo 20 secondi di attesa...
Warning: fsockopen() [function.fsockopen]: unable to connect to 
www.salvatorepaci.it:80
 in 
/rootdomain/it/s/a/
salvatorepaci.it/public_html/esiste.php
 on line 22
http://www.salvatorepaci.it/sopraz.jpg
 file exists! 

 
http://www.salvatorepaci.it/sopra.jpg
 file exists!
Il problema è legato a come il vecchio Setec ha codificato quella 
funzione. In pratica il problema è proprio in queste righe:
$fp = fsockopen ($host, 80, $errno, $errstr, 20);
if (!$fp) { return 2; }
$fp è FALSE, quindi la funzione termina e restituisce 2, che è valutato 
come TRUE quando vai a fare un controllo del tipo:
if (remote_file_exists ($url))
Se anziché "return 2", provi a scrivere "return 0", vedrai che non ti 
verrà scritto "file exists!".
Con tutta probabilità è Tiscali che blocca la connessione: non hai 
risposta dal server, sicché dopo i venti secondi di timeout che hai 
impostato nella funzione fsockopen, ti scatta il timeout e $fp è FALSE.
Non è un problema di PHP. Prova a chiedere al centro assistenza di 
Tiscali, ma temo che non ci sia nulla da fare.
--
rob4you