2015-09-30 2 views
2

J'essaie de vérifier si le fichier pdf existe dans arXiv. Il y a deux exemplesComment vérifier si le fichier pdf existe?

arxiv.org/pdf/1207.4102.pdf

arxiv.org/pdf/1207.41021.pdf

Le premier est un fichier pdf et le second n'est pas et renvoie un error page.

Existe-t-il un moyen de vérifier si une URL est un fichier pdf ou non? J'ai essayé les réponses dans How do I check if file exists in jQuery or JavaScript? mais aucun d'eux ne fonctionne et ils retournent vrai (c'est-à-dire le dossier existe) pour les deux urls. Existe-t-il un moyen de trouver quelle URL est un fichier pdf en JavaScript/jQuery ou même PHP?

Est-ce que cela peut être résolu en utilisant pdf.js?

+0

Il semble que http://arxiv.org/ .htaccess est la réécriture de toutes les demandes et n'a pas une page d'erreur ... alors définir toutes les demandes recevront une réponse 200. .. essayez http://arxiv.org/pdf/1207.41102.pdf dans votre navigateur ... Vous pourriez ensuite analyser la réponse pour voir si c'est du HTML ... sinon, ce pourrait être votre pdf. –

Répondre

0

Il renvoie le résultat correct.

function getHTTPCode($url) { 

    $ch = curl_init($url); 
    curl_setopt($ch, CURLOPT_HEADER, true); 
    curl_setopt($ch, CURLOPT_NOBODY, true); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); 
    curl_setopt($ch, CURLOPT_TIMEOUT,10); 
    curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)'); 
    $output = curl_exec($ch); 
    $httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE); 
    curl_close($ch); 
    return $httpcode; 

}

$url = 'http://arxiv.org/pdf/1207.41021.pdf'; 
if(getHTTPCode($url)==200) { 
echo 'found'; 
} else { 
echo 'not found'; 
} 
+0

Quel est le principal différent entre votre réponse et le mien? Pas cool de copier ma réponse. –

+0

Il semble même sauf agent de navigateur. Je n'ai pas posté ma réponse si je savais qu'il y avait déjà une solution curl.Vous avez posté votre réponse pendant que je testais la mienne. – Samir

+0

Vous devriez avoir vérifié avant de poster. –

0

Vous pouvez essayer ce code pour vérifier le fichier de serveur distant EXISTE ou non par Url

$filename= 'arxiv.org/pdf/1207.4102.pdf'; 
    $file_headers = @get_headers($filename); 

    if($file_headers[0] == 'HTTP/1.0 404 Not Found'){ 
      echo "The file $filename does not exist"; 
    } else if ($file_headers[0] == 'HTTP/1.0 302 Found' && $file_headers[7] == 'HTTP/1.0 404 Not Found'){ 
     echo "The file $filename does not exist, and I got redirected to a custom 404 page.."; 
    } else { 
     echo "The file $filename exists"; 
    } 
+0

@ user3741635 Vérification du fichier du serveur distant, je vous recommande de toujours le faire sur le serveur. –

0

Vous pouvez utiliser curl et vérifier une 200http status code, i.e. .:

<?php 

$url = 'http://arxiv.org/pdf/1207.41021.pdf'; 
$ch = curl_init($url); 
curl_setopt($ch, CURLOPT_HEADER, true); // we want headers 
curl_setopt($ch, CURLOPT_NOBODY, true); // we don't need body 
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION,1); // we follow redirections 
curl_setopt($ch, CURLOPT_TIMEOUT,10); 
$output = curl_exec($ch); 
$httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE); 
curl_close($ch); 


if($httpcode == "200"){ 
    echo "file exist"; 
}else{ 
    echo "doesn't exist"; 
} 

Les deux fichiers pdf retour 403 Forbidden

Le serveur a compris la requête, mais refuse de le remplir. L'autorisation n'aidera pas et la demande NE DEVRAIT PAS être répétée. Si la méthode de demande n'était pas HEAD et le serveur souhaite rendre public pourquoi la demande n'a pas été remplie, il DEVRAIT décrire la raison pour le refus dans l'entité. Si le serveur ne souhaite pas mettre cette information à la disposition du client, le code d'état 404 (Non Trouvé) peut être utilisé à la place.