PHP判断远程文件是否存在的几种方法
在做一个图片预览中图的东西,遇到一个问题,就是要判断远程文件是否存在(不是同一台服务器)。
代码如下:
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 '文件不存在' ;
}
?>
|
PHP判断远程文件是否存在的几种方法的更多相关文章
- PHP 获取远程文件的大小的3种方法
1.使用file_get_contents() <?php $file = file_get_contents($url); echo strlen($file); ?> 2. 使用get ...
- PHP判断远程文件是否存在
<?php /* 函数:remote_file_exists 功能:判断远程文件是否存在 参数: $url_file -远程文件URL 返回:存在返回true,不存在或者其他原因返回false ...
- php如何判断远程文件是否存在
<?php /* 函数:remote_file_exists 功能:判断远程文件是否存在 参数: $url_file -远程文件URL 返回:存在返回true,不存在或者其他原因 ...
- C# 判断远程文件是否存在
/// <summary> /// 判断远程文件是否存在 /// </summary> /// <param name="url">url地址& ...
- [PHP学习教程 - 文件]002.判断远程文件是否存在(Remote File Exists)
引言:项目过程当中碰到了类似流程这样的需求,对服务器上的文件进行依次操作,如:检查文件格式->检查文件是否有更新->处理更新->同步其他服务器等等 如果需求的操作是依赖于远程文件是否 ...
- PHP获取文件后缀名的三种方法
如下: <? PHP获取文件后缀名的几种方法1: function get_file_type($filename){ $type = substr($filename, strrpos($fi ...
- JAVA中获取文件MD5值的四种方法
JAVA中获取文件MD5值的四种方法其实都很类似,因为核心都是通过JAVA自带的MessageDigest类来实现.获取文件MD5值主要分为三个步骤,第一步获取文件的byte信息,第二步通过Messa ...
- Java 判断字符串是否为空的四种方法、优缺点与注意事项
以下是Java 判断字符串是否为空的四种方法: 方法一: 最多人使用的一个方法, 直观, 方便, 但效率很低: if(s == null ||"".equals(s));方法二: ...
- linux中删除文件内空白行的几种方法。
linux中删除文件内空白行的几种方法 有时你可能需要在 Linux 中删除某个文件中的空行.如果是的,你可以使用下面方法中的其中一个.有很多方法可以做到,但我在这里只是列举一些简单的方法. 你可能已 ...
随机推荐
- sun.proxy.$Proxy0 cannot be cast to dao.impl.MyAdviceImpl
ApplicationContext ac=new ClassPathXmlApplicationContext("applicationContext.xml"); ...
- Vijos P1680距离
题目 背景 简单的DP 描述 设有字符串X,我们称在X的头尾及中间插入任意多个空格后构成的新字符串为X的扩展串,如字符串X为”abcbcd”,则字符串“abcb_c_”,“_a_bcbcd_”和“ab ...
- Shell脚本运行hive语句 | hive以日期建立分区表 | linux schedule程序 | sed替换文件字符串 | shell推断hdfs文件文件夹是否存在
#!/bin/bash source /etc/profile; ################################################## # Author: ouyang ...
- c++,类的组合
1. 在A类中以B类的对象作为成员变量,称为类的组合(composition). 可以先看看这篇文章理解组合的用处: C++中组合的使用 http://blog.csdn.net/jia_xiaoxi ...
- [Swust OJ 179]--火柴棍(找规律)
题目链接:http://acm.swust.edu.cn/problem/0179/ Time limit(ms): 1000 Memory limit(kb): 65535 Descriptio ...
- Android:设置背景图和标题
在MainActivity.onCreate(Bundle savedInstanceState){}设置背景图和标题. setTitle("wyl的diary");//标题,即左 ...
- instanceof 变量是否属于某一类 class 的实例
<?phpclass MyClass{} class NotMyClass{}$a = new MyClass;$b = new NotMyClass;var_dump($a instanceo ...
- Socket编程模式
Socket编程模式 本文主要分析了几种Socket编程的模式.主要包括基本的阻塞Socket.非阻塞Socket.I/O多路复用.其中,阻塞和非阻塞是相对于套接字来说的,而其他的模式本质上来说是基于 ...
- 集合如何判断null
转http://blog.csdn.net/baple/article/details/8604585 java判断list为空 分类: JAVA 2013-02-23 08:47 18368人阅读 ...
- 基于visual Studio2013解决C语言竞赛题之0412水仙花数
题目 解决代码及点评 按照题目要求,3位数是从100~999,那么我们设计一个for循环遍历所有三位数 对每个三位数进行水仙花数的判断即可 /******************** ...