在做一个图片预览中图的东西,遇到一个问题,就是要判断远程文件是否存在(不是同一台服务器)。
代码如下:

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
    
$url2
=
'http://www.test.com/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
'文件不存在'
;
    
}
    
?>

PHP判断远程文件是否存在的几种方法的更多相关文章

  1. PHP 获取远程文件的大小的3种方法

    1.使用file_get_contents() <?php $file = file_get_contents($url); echo strlen($file); ?> 2. 使用get ...

  2. PHP判断远程文件是否存在

    <?php /* 函数:remote_file_exists 功能:判断远程文件是否存在 参数: $url_file -远程文件URL 返回:存在返回true,不存在或者其他原因返回false ...

  3. php如何判断远程文件是否存在

    <?php /*   函数:remote_file_exists   功能:判断远程文件是否存在   参数: $url_file -远程文件URL   返回:存在返回true,不存在或者其他原因 ...

  4. C# 判断远程文件是否存在

    /// <summary> /// 判断远程文件是否存在 /// </summary> /// <param name="url">url地址& ...

  5. [PHP学习教程 - 文件]002.判断远程文件是否存在(Remote File Exists)

    引言:项目过程当中碰到了类似流程这样的需求,对服务器上的文件进行依次操作,如:检查文件格式->检查文件是否有更新->处理更新->同步其他服务器等等 如果需求的操作是依赖于远程文件是否 ...

  6. PHP获取文件后缀名的三种方法

    如下: <? PHP获取文件后缀名的几种方法1: function get_file_type($filename){ $type = substr($filename, strrpos($fi ...

  7. JAVA中获取文件MD5值的四种方法

    JAVA中获取文件MD5值的四种方法其实都很类似,因为核心都是通过JAVA自带的MessageDigest类来实现.获取文件MD5值主要分为三个步骤,第一步获取文件的byte信息,第二步通过Messa ...

  8. Java 判断字符串是否为空的四种方法、优缺点与注意事项

    以下是Java 判断字符串是否为空的四种方法: 方法一: 最多人使用的一个方法, 直观, 方便, 但效率很低: if(s == null ||"".equals(s));方法二: ...

  9. linux中删除文件内空白行的几种方法。

    linux中删除文件内空白行的几种方法 有时你可能需要在 Linux 中删除某个文件中的空行.如果是的,你可以使用下面方法中的其中一个.有很多方法可以做到,但我在这里只是列举一些简单的方法. 你可能已 ...

随机推荐

  1. uvalive 3971 - Assemble(二分搜索 + 贪心)

    题目连接:3971 - Assemble 题目大意:有若干个零件, 每个零件给出的信息有种类, 名称, 价格, 质量,  现在给出一个金额, 要求在这个金额范围内, 将每个种类零件都买一个, 并且尽量 ...

  2. uva - The Lottery(容斥,好题)

    10325 - The Lottery The Sports Association of Bangladesh is in great problem with their latest lotte ...

  3. highchats与php结合生成动态统计图

    series: [{ type: 'pie', name: 'Browser share', data: [ ['Firefox', 45.0], ['IE', 26.8], { name: 'Chr ...

  4. AlertDialog具体解释

    对话框介绍与演示样例         对话框在程序中不是必备的,可是用好对话框能对我们编写的应用增色不少.採用对话框能够大大添加应用的友好性.比較经常使用的背景是:用户登陆.网络正在下载.下载成功或者 ...

  5. OpenStack导入镜像后Launch不起来的几个问题

    Dashboard上显示state为error 没有其他报错 用nova list找到虚拟机的id 然后nova show,可以得到fault详细信息 也可以查看下面两个log /var/log/no ...

  6. NYoj-街区最短路径问题

    街区最短路径问题 时间限制:3000 ms  |  内存限制:65535 KB 难度:4 描写叙述 一个街区有非常多住户,街区的街道仅仅能为东西.南北两种方向. 住户仅仅能够沿着街道行走. 各个街道之 ...

  7. 【Oracle】不安装Oracle客户端直接用PL/SQL连接数据库

    1.下载 instantclient_11_2.zip PL/SQL2.解压instantclient_11_2.zip到相应文件夹,比如:E:\oracleclient\instantclient_ ...

  8. 利用VC助手(VA)添加注释

    利用VC助手(VA)添加注释 今天想给自己写的代码加上版权信息,同时整理一下代码的注释.但是为了保持同样的格式,总是copy,显得有些繁琐.然后试图找解决方案.我用的是VS 2010, 刚开始是尝试了 ...

  9. Cognos 图表用图片取代”没有数据显示”

    在Cognos中做出来报表展示的时候因为没有数据感觉显示“没有可用数据”感觉很不美观.所以想用一张图片代替. 在图表的属性里面有一个“无数据内容”,点击打开之后有三个选项: 默认就是显示“没有可用数据 ...

  10. 深入探究VC —— 链接器link.exe(4)

    在程序编译完成后,生成的文件是以.obj为扩展名的对象文件,link.exe是将这些对象文件与库链接起来以创建可执行文件或动态链接库文件的工具. link.exe的输入文件包括obj文件.lib文件. ...