将来的你, 肯定会感激现在拼命的自己。
  • php
  •  2015.06.04 13:02
  •  548

PHP如何判断远程图片文件是否存在

fopen()方法

最简单的方法就是用fopen(),看看文件能否打开,能打就文件当然就存在。

<?php
$url = 'http://www.nowamagic.net/images/test.jpg';
if( @fopen( $url, 'r' ) ) { 
  echo 'File Exits';
} else {
  echo 'File Do Not Exits';
}
?>

fopen() 函数打开文件或者 URL。如果打开失败,函数会返回 FALSE。

fopen() 将 filename 指定的名字资源绑定到一个流上。如果 filename 是 "scheme://..." 的格式,则被当成一个 URL,PHP 将搜索协议处理器(也被称为封装协议)来处理此模式。如果该协议尚未注册封装协议,PHP 将发出一条消息来帮助检查脚本中潜在的问题并将 filename 当成一个普通的文件名继续执行下去。

如果 PHP 认为 filename 指定的是一个本地文件,将尝试在该文件上打开一个流。该文件必须是 PHP 可以访问的,因此需要确认文件访问权限允许该访问。如果激活了安全模式或者 open_basedir 则会应用进一步的限制。

如果 PHP 认为 filename 指定的是一个已注册的协议,而该协议被注册为一个网络 URL,PHP 将检查并确认 allow_url_fopen 已被激活。如果关闭了,PHP 将发出一个警告,而 fopen 的调用则失败。

一个fopen的用法

<?php
$file = fopen("test.txt","r");
$file = fopen("/home/test/test.txt","r");
$file = fopen("/home/test/test.gif","wb");
$file = fopen("http://www.example.com/","r");
$file = fopen("ftp://user:password@example.com/test.txt","w");
?>

但是如果图片资源所在服务器挂掉了,这个函数会一直等待,所以我们需要一个备用方案。


CURL 方法

CURL是个很好用的类库,下面看下如何用它来判断。

<?php
$url2 = 'http://www.nowamagic.net/test.jpg';

$ch = curl_init(); 
$timeout = 10; 
curl_setopt ($ch, CURLOPT_URL, $url2); 
curl_setopt($ch, CURLOPT_HEADER, 1); 
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout); 

$contents = curl_exec($ch);
//echo $contents;
if (preg_match("/404/", $contents)){
  echo '文件不存在';
}
?>

curl_exec()执行完之后如果文件不存在,会返回如下信息:

HTTP/1.1 404 Not Found
Date: Tue, 14 Feb 2012 05:08:34 GMT
Server: Apache
Accept-Ranges: bytes
Content-Length: 354
Content-Type: text/html

用正则看看是否有404,有的话文件就不存在。

来自:http://www.nowamagic.net/librarys/veda/detail/1364


 钟永标

个人头像


 热门推荐


 热门阅读