在另一个网站上检查文件是否存在

3

我一直在尝试开发代码,检查另一个网站上是否存在PDF文件。为了测试目的,我在网上找到了一个随机的PDF文件:

http://www.tutorialspoint.com/php/php_tutorial.pdf

我将尝试以下代码,但两种方法都无法正常工作:
方法一:
$path1 = 'http://www.tutorialspoint.com/php/php_tutorial.pdf';
if (file_exists($path1))
{
  echo "found!";
}
else
{
  echo "not found";
}

//RESULT: not found

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

if(UR_exists('http://www.tutorialspoint.com/php/php_tutorial.pdf'))
   echo "This page exists";
else
   echo "This page does not exist";

//RESULT: This page does not exist

页面在两种情况下都能正常执行,但结果总是文件不存在,我知道它存在。我做错了什么?

http://php.net/manual/en/function.error-reporting.php - Funk Forty Niner
@Fred-ii- 但是我没有收到任何错误。页面执行得很好,但结果在两种情况下都是false,我不明白为什么。 - Webeng
也许他们的网站不喜欢被抓取。 - Funk Forty Niner
@Fred-ii- 也许是这样,但我尝试了其他网站,结果都一样。此外,如果我手动点击链接,我可以轻松地跳转到pdf文件,所以这让我相信必须有一种简单的方法来检查其存在性,但现在我卡住了。 - Webeng
1
如果($headers === false) { echo "无法连接"; return false; } 我猜 - Peter van der Wal
显示剩余4条评论
1个回答

5

file_exists使用物理路径,您需要提供的参数应该是文件在服务器上的地址,而不是URL!另一方面,header方法应该正常工作!但是测试404标头响应是值得尝试的,您可以这样做:

$url = "http://www.tutorialspoint.com/php/php_tutorial.pdf";
$header_response = get_headers($url);
if (header_response) {
    if ( strpos( $header_response[0], "404" ) !== false ){
      // PDF DOES NOT EXIST
        echo "PDF DOES NOT EXIST";
    }else{
      // PDF EXISTS!!
        echo "PDF EXISTS";
    }
}else {
    echo "PDF DOES NOT EXIST";
}

请记住,启用allow_url_fopen = 1可以使用外部URL,这对于IT技术相关内容非常重要。


嗨@Med Abida!我在一个不存在的$url上尝试了你的方法$url ='http://www.asdfasdzzfasdf.com/asd.pdf',它说它存在。你能确认你的情况也是一样的吗? - Webeng
现在通知已经消失了,这是因为我在代码中放置了错误报告功能,但是代码仍然对所有PDF文件显示“文件已存在”,无论它们是否存在。 - Webeng
哦,我明白了。这可能是一个愚蠢的问题,但是我该如何检查URL是否有效? - Webeng
1
不要调用 get_headers 两次,因为它将向服务器发送两个请求,而只需要一个。将结果存储在变量中,并检查该变量是否为 false(或非)。 - Peter van der Wal
@MedAbida工作得非常好,谢谢伙计!也感谢Peter! - Webeng
显示剩余8条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接