2015-09-30 3 views
2

Я пытаюсь проверить, существует ли файл pdf в arXiv. Есть два примераКак проверить, существует ли файл PDF?

arxiv.org/pdf/1207.4102.pdf

arxiv.org/pdf/1207.41021.pdf

Первый представляет собой PDF-файл, а второй нет и возвращает error page.

Есть ли способ проверить, является ли URL-адрес PDF или нет. Я попробовал ответы в How do I check if file exists in jQuery or JavaScript?, но никто из них не работает, и они возвращают true (т. Е. Файл существует) для обоих URL-адресов. Есть ли способ найти, какой url является файлом PDF в JavaScript/jQuery или даже PHP?

Можно ли это решить, используя pdf.js?

+0

Похоже http://arxiv.org/ .htaccess переписывает все запросы и не имеет ошибочную страницу набор так ... все запросы будут получать 200 ответ. .. попробуйте http://arxiv.org/pdf/1207.41102.pdf в вашем браузере ... Затем вы можете проанализировать ответ, чтобы узнать, является ли он html ... если нет, то это может быть ваш pdf. –

ответ

0

Он возвращает правильный результат.

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

В чем разница между вашим ответом и моей? Не рекомендуется копировать мой ответ. –

+0

Кажется, что кроме агента браузера. Я не опубликовал свой ответ, если бы знал, что уже есть завиток.Вы отправили свой ответ, пока я тестировал свой. – Samir

+0

Вы должны были проверить перед публикацией. –

0

вы можете попробовать этот код для проверки файла удаленного сервера существует или нет 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 проверка файла удаленного сервера, я рекомендую делать на стороне сервера всегда. –

0

Вы можете использовать curl и проверить для 200http status code, т.е .:

<?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"; 
} 

Оба файла в формате PDF вернуться 403 Forbidden

Сервер понял запрос, но отказывается выполнять его. Авторизация не поможет, и запрос НЕ ДОЛЖЕН повториться. Если метод запроса не был ГОЛОВЫМ, и сервер хочет сделать общедоступным , почему запрос не был выполнен, СЛЕДУЕТ описать причину для отказа в объекте. Если сервер не желает делать , эта информация доступна клиенту, вместо этого может использоваться код состояния 404 (Not Найдено).

Смежные вопросы