在做一个图片预览中图的东西,遇到一个问题,就是要判断远程文件是否存在(不是同一台服务器)。
代码如下:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
//方法一 function
file_exists ( $url ) { $ch
= curl_init(); curl_setopt( $ch ,
curlopt_url, $url ); curl_setopt( $ch ,
curlopt_nobody, 1); //
不下载 curl_setopt( $ch ,
curlopt_failonerror, 1); curl_setopt( $ch ,
curlopt_returntransfer, 1); if (curl_exec( $ch )!==false) return
true; else return
false; } //方法二 function
file_exists2( $url ) { if ( file_get_contents ( $url ,0,null,0,1)) return
1; else return
0; } //方法三 function
file_exists ( $url )
{ $curl
= curl_init( $url ); //
不取回数据 curl_setopt( $curl ,
CURLOPT_NOBODY, true); //
发送请求 $result
= curl_exec( $curl ); $found
= false; //
如果请求没有发送失败 if
( $result
!== false) { //
再检查http响应码是否为200 } |
方法一无论图片在不在都是返回FALSE;
方法二windows下可行,LINUX下无论图片在不在都返加TRUE;
方法三应该是最合适的
另外:用get_headers() 方法存在效率问题,建议不使用作为此解决方案
fsockopen版:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
|
$info
= parse_url ( $url ); $fp
= fsockopen ( $info [ 'host' ],
80, $errno ,
$errstr ,
30); fputs ( $fp , "GET
{$info['path']} HTTP/1.1\r\n" ); fputs ( $fp ,
"Host:
{$info['host']}\r\n" ); fputs ( $fp ,
"Connection:
close\r\n\r\n" ); $headers
= array (); while (! feof ( $fp ))
{ $line
= fgets ( $fp ); if ( $line
!= "\r\n" )
{ $headers []
= $line ; } else
{ break ; } } echo
"<pre>" ; print_r( $headers ); |
通过http状态码来判断文件是否存在,比如,响应 302,301,404等都为不存在,如果是200,304,等可以视为文件存在。
fopen()方法:
01
02
03
04
05
06
07
08
09
10
11
12
|
<?php if (
@ fopen (
$url ,
'r'
) ) { echo
'File Exits' ; } else { echo
'File Do Not Exits' ; } ?> |
CURL 方法:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
|
<?php $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
'文件不存在' ; } ?> |
作者:chenjie3392593 发表于2013-7-17 13:21:33 原文链接
阅读:45 评论:0 查看评论