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 中删除某个文件中的空行.如果是的,你可以使用下面方法中的其中一个.有很多方法可以做到,但我在这里只是列举一些简单的方法. 你可能已 ...
随机推荐
- Linux的起源、特点和版本号
前言 最近上陈渝老师的<高级操作系统>,需要在ucore实验平台上完成一个麻雀虽小五脏俱全的OS,本着看过一小半<30天自制操作系统>的自信,以为这不过是小case,怎料被虐得 ...
- Qt的信号槽,一个老MFC的经验
最近在利用闲暇时间研究Qt,大概有3周了,看过了官网的white paper并浏览了一遍<C++ GUI Programming with Qt 4, 2nd Edition>.总的来说, ...
- 动态规划 最长公共子序列 LCS,最长单独递增子序列,最长公共子串
LCS:给出两个序列S1和S2,求出的这两个序列的最大公共部分S3就是就是S1和S2的最长公共子序列了.公共部分 必须是以相同的顺序出现,但是不必要是连续的. 选出最长公共子序列.对于长度为n的序列, ...
- 第四种:GCD
GCD 1> 概述 Grand Central Dispatch (GCD)是Apple开发的一种多核编程技术.主要用于优化应用程序以支持多核处理器以及其他对称多处理系统. GCD提供函数实现多 ...
- android音乐柱状频谱实现
from: http://blog.csdn.net/topgun38/article/details/7663849 原文地址:http://blog.csdn.net/caryee89/artic ...
- SpringMVC+Mybatis+Mysql实战项目学习--环境搭建
1.开发IDE:Spring Tool Suite(自带maven插件) 下载地址https://spring.io/tools/sts/all 在STS.ini配置信息中加下面一行 保证编码格式为u ...
- 记录一次SQL查询语句
以前发现比较经典的句子,都是记录在电脑上,我今天想搬到博客上,在我看来,写博客真的是一件非常头疼的事,它是内心的一道坎,我必须得跨过它. CREATE TABLE t_jeff ( id int NO ...
- PHP7特性概览
了解了PHP7的一些特性,搭建PHP7源码编译环境,并运行官网这些新特性的代码. 在64位平台支持64位integer 在64位平台支持64位integer,长度为2^64-1 字符串. 更详细查看 ...
- [Swust OJ 585]--倒金字塔(LIS最长不下降子序列)
题目链接:http://acm.swust.edu.cn/problem/585/ Time limit(ms): 3000 Memory limit(kb): 65535 SWUST国的一支科学 ...
- js 易错点
如下代码: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w ...