2010-02-18 16 views
6

Come verificare se un file esiste su un server esterno? Ho un url "http://logs.com/logs/log.csv" e ho uno script su un altro server per verificare se questo file esiste. Ho provatoCome verificare se un file esiste su un server esterno

$handle = fopen("http://logs.com/logs/log.csv","r"); 
if($handle === true){ 
return true; 
}else{ 
return false; 
} 

e

if(file_exists("http://logs.com/logs/log.csv")){ 
return true; 
}else{ 
return false; 
} 

Questi methos semplicemente non funzionano

+1

provare 'if ($ handle)'. '$ handle' non sarà un booleano, quindi non ha senso confrontarlo con uno. – Skilldrick

+0

Domanda simile: http://stackoverflow.com/questions/2280394 – Gordon

risposta

1
<?php 
    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_URL, 4file dir); 
    curl_setopt($ch, CURLOPT_HEADER, true); 
    curl_setopt($ch, CURLOPT_NOBODY, true); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); 
    curl_setopt($ch, CURLOPT_MAXREDIRS, 10); 

    $data = curl_exec($ch); 
    curl_close($ch); 

    preg_match_all("/HTTP\/1\.[1|0]\s(\d{3})/",$data,$matches); //check for HTTP headers 

    $code = end($matches[1]); 

    if(!$data) 
    { 
     echo "file could not be found"; 
    } 
    else 
    { 
     if($code == 200) 
     { 
      echo "file found"; 
     } 
     elseif($code == 404) 
     { 
      echo "file not found"; 
     } 
    } 
    ?> 
+0

c'è un modo per catturare direttamente i dati per gli URL che possono essere chiamati una sola volta quando spuntano che funzionano? – My1

3

Questo dovrebbe funzionare:

$contents = file_get_contents("http://logs.com/logs/log.csv"); 

if (strlen($contents)) 
{ 
    return true; // yes it does exist 
} 
else 
{ 
    return false; // oops 
} 

Nota: Questo presuppone file non è vuoto

+1

Cosa succede se il file esiste ma è vuoto? – Skilldrick

+0

@Skilldrick: hai ragione, risposta modificata. – Sarfraz

+0

Questo sarà interessante se il file è abbastanza grande – eithed

8
function checkExternalFile($url) 
{ 
    $ch = curl_init($url); 
    curl_setopt($ch, CURLOPT_NOBODY, true); 
    curl_exec($ch); 
    $retCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); 
    curl_close($ch); 

    return $retCode; 
} 

$fileExists = checkExternalFile("http://example.com/your/url/here.jpg"); 

// $fileExists > 400 = not found 
// $fileExists = 200 = found. 
Problemi correlati