web-dev-qa-db-fra.com

Comment vérifier si un fichier existe à partir d'une URL

Je dois vérifier si un fichier particulier existe sur un serveur distant. Utiliser is_file() et file_exists() ne fonctionne pas. Des idées comment faire ceci rapidement et facilement?

34
David

vous devez utiliser CURL

function is_url_exist($url){
    $ch = curl_init($url);    
    curl_setopt($ch, CURLOPT_NOBODY, true);
    curl_exec($ch);
    $code = curl_getinfo($ch, CURLINFO_HTTP_CODE);

    if($code == 200){
       $status = true;
    }else{
      $status = false;
    }
    curl_close($ch);
   return $status;
}
63
Amila

Vous n'avez pas besoin de CURL pour cela ... Trop de frais généraux simplement pour vouloir vérifier si un fichier existe ou non ... 

Utilisez PHP get_header

$headers=get_headers($url);

Puis vérifiez si $ result [0] contient 200 OK (ce qui signifie que le fichier est là)

Une fonction permettant de vérifier si une URL fonctionne peut être la suivante:

function UR_exists($url){
   $headers=get_headers($url);
   return stripos($headers[0],"200 OK")?true:false;
}

/* You can test a URL like this (sample) */
if(UR_exists("http://www.amazingjokes.com/"))
   echo "This page exists";
else
   echo "This page does not exist";
64
patrick

Je viens de trouver cette solution:

if(@getimagesize($remoteImageURL)){
    //image exists!
}else{
    //image does not exist.
}

Source: http://www.dreamincode.net/forums/topic/11197-checking-if-file-exists-on-remote-server/

14
Daniel Kossmann

Selon notre test entre 2 serveurs différents, les résultats sont les suivants:

utiliser curl pour vérifier 10 fichiers .png (environ 5 mb chacun) était en moyenne de 5,7 secondes .

Donc, lors de notre test, le curl était beaucoup plus rapide si vous deviez vérifier des fichiers plus volumineux!

notre fonction curl est:

function remote_file_exists($url){
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_NOBODY, true);
    curl_exec($ch);
    $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close($ch);
    if( $httpCode == 200 ){return true;}
    return false;
}

voici notre exemple de contrôle d'en-tête:

function UR_exists($url){
   $headers=get_headers($url);
   return stripos($headers[0],"200 OK")?true:false;
}
7
Daniel de coder

Faites une requête avec curl et voyez si elle retourne un code d'état 404. Effectuez la demande à l'aide de la méthode de requête HEAD afin qu'elle ne renvoie que les en-têtes sans corps.

1
fivedigit

Vous pouvez utiliser la fonction file_get_contents ();

if(file_get_contents('https://example.com/example.txt')) {
    //File exists
}
0
Tom Aschmann