[PHP学习教程 - 文件]002.判断远程文件是否存在(Remote File Exists)
引言:项目过程当中碰到了类似流程这样的需求,对服务器上的文件进行依次操作,如:检查文件格式->检查文件是否有更新->处理更新->同步其他服务器等等
如果需求的操作是依赖于远程文件是否存在,存在后再进行操作,则可以使用今天提供的这个函数。
一句话的事情,下面直接上高清无MSK的精妙代码!

功能函数
获得当前请求的页面路径(URL)地址
语法:$url = getPageUrl()
参数解析:
$url_file string-待判断的URL文件路径地址
返回结果:
bool - y/n
<?php
/*
* 函数:remote_file_exists
* 功能:判断远程文件是否存在
* 参数:$url_file - 远程文件URL
* 返回:存在返回true,不存在或者其他原因返回false
*/
function remote_file_exists($url_file){
// 检测输入
$url_file = trim($url_file);
if (empty($url_file)) { return false; }
$url_arr = parse_url($url_file);
if (!is_array($url_arr) || empty($url_arr)){return false; } // 获取请求数据
$host = $url_arr['host'];
$path = $url_arr['path'] ."?".$url_arr['query'];
$port = isset($url_arr['port']) ?$url_arr['port'] : "80"; // 连接服务器
$fp = fsockopen($host, $port, $err_no, $err_str, 30);
if (!$fp) { return false; } // 构造请求协议
$request_str = "GET ".$path."HTTP/1.1\n";
$request_str .= "Host:".$host."\n";
$request_str .= "Connection:Close\n"; // 发送请求
fwrite($fp,$request_str);
$first_header = fgets($fp, 1024);
fclose($fp); // 判断文件是否存在
if (trim($first_header) == "") { return false; }
if (!preg_match("/200/", $first_header)) {
return false;
} return true;
}
?>
说明:此处单纯的是使用直接的HTTP请求来进行判断,不需要任何插件支持。
示例1:
<?
// 测试代码
$str_url = 'http://127.0.0.1/data.php?id=512714';
$exits = remote_file_exists($str_url);
echo $exists ? "Exists" : "Not exists";
?>
插件支持
方法一(需要开启allow_url_fopen):
<?php
$url = "http://cn.wordpress.org/wordpress-3.3.1-zh_CN.zip";
$fileExists = @file_get_contents($url, null, null, -1, 1) ? true : false;
echo $fileExists; // 返回1,就说明文件存在。
?>
方法二(需要服务器支持curl组件):
<?php
function check_remote_file_exists($url) {
$curl = curl_init($url); // 不取回数据
curl_setopt($curl, CURLOPT_NOBODY, true);
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'GET'); // 发送请求
$result = curl_exec($curl);
$found = false; // 如果请求没有发送失败
if ($result !== false) {
// 检查http响应码是否为200
$statusCode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
if ($statusCode == 200) {
$found = true;
}
}
curl_close($curl); return $found;
} $url = "http://cn.wordpress.org/wordpress-3.3.1-zh_CN.zip";
echo check_remote_file_exists($url); // 返回1,说明存在。 ?>
结束语
本讲利用两种方式介绍了判断远程文件是否存在,大家可以根据项目情况进行使用。
未完,待更新...

本站文章为宝宝巴士 SD.Team原创,转载务必在明显处注明:(作者官方网站:宝宝巴士)
转载自【宝宝巴士SuperDo团队】 原文链接: http://www.cnblogs.com/superdo/p/4822723.html
[PHP学习教程 - 文件]002.判断远程文件是否存在(Remote File Exists)的更多相关文章
- PHP判断远程文件是否存在
<?php /* 函数:remote_file_exists 功能:判断远程文件是否存在 参数: $url_file -远程文件URL 返回:存在返回true,不存在或者其他原因返回false ...
- php如何判断远程文件是否存在
<?php /* 函数:remote_file_exists 功能:判断远程文件是否存在 参数: $url_file -远程文件URL 返回:存在返回true,不存在或者其他原因 ...
- PHP判断远程文件是否存在的几种方法
在做一个图片预览中图的东西,遇到一个问题,就是要判断远程文件是否存在(不是同一台服务器). 代码如下: 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 ...
- C# 判断远程文件是否存在
/// <summary> /// 判断远程文件是否存在 /// </summary> /// <param name="url">url地址& ...
- Protocol Buffer学习教程之编译器与类文件(三)
Protocol Buffer学习教程之编译器与类文件(三) 1. 概述 在前面两篇中,介绍了Protobuf的基本概念.应用场景.与protobuf的语法等.在此篇中将介绍如何自己编译protobu ...
- [PHP学习教程 - 类库]002.FTP操作(FTP)
引言:FTP是大家上传至站点服务器必须要使用的协议.现在常用的FTP客户端工具也很多,如:8uftp,FlashFXP,....但是使用客户端工具就无法真正与自动化联系起来.所以今天,我们为大家讲一下 ...
- [PHP学习教程 - 系统]002.模拟守护进程(Daemon)-程序永远在后台运行
引言:如何模拟那些自动轮循的服务,像守护进程(Daemon)那样,可以一直执行,永不停歇呢! Come on! Do it! Do! Do! Do!.... 使用接口: int ignore_user ...
- [PHP学习教程 - 网络]002.$_SERVER["SCRIPT_NAME"]、$_SERVER["PHP_SELF"]、$_SERVER["QUERY_STRING"]、$_SERVER["REQUEST_URI"]介绍($_SERVER URL Infomation)
引言:在使用原生PHP的时候,对于URL路径的切割,如:域名,查询参数等等的提取,通常绝大多数兄弟会忽略$_SERVER中定义的内置常量的关系,这里为大家讲解一下. 常用的URL请求路径$_SERVE ...
- [PHP学习教程 - 网络]002.获取网页内容(URL Content)
引言:获取网页内容是我们实现网页操作的基本之基本,今天这一讲,我们和大家讲一下基本请求网页内容的几种方法. 我们似乎每天都要做这样一件事情,打开一个浏览器,输入网址,回车,一个空白的页面顿时有了东西, ...
随机推荐
- P1468 派对灯 Party Lamps(BIG 模拟)
题目描述 在IOI98的节日宴会上,我们有N(10<=N<=100)盏彩色灯,他们分别从1到N被标上号码. 这些灯都连接到四个按钮: 按钮1:当按下此按钮,将改变所有的灯:本来亮着的灯就熄 ...
- RF(元素定位)
1.id 定位 Open Browser https://www.baidu.com gc Input Text id=kw selenium #注意 id 的值 kw 没有用引号括起来 Close ...
- Redis超详细总结
NoSQL概述 一.数据存储的演化史 1.单机MySQL的美好年代 在90年代,一个网站的访问量一般都不大,用单个数据库完全可以轻松应付.在那个时候,更多的都是静态网页,动态交互类型的网站不多. 上述 ...
- 用js写出一个漂亮的单选框选中效果
一般的input框比较简单,我们可以用JavaScript配合css背景图片定位让我们模拟写出一个点击选中效果 首先需要有个图片素材,当页面加载的时候是背景图片定位到左图,当我们点击图片的时候,背景图 ...
- spring中bean的常用属性
一.scop scope用来配置bean对象是否是单例模式.单例模式是java的二十三种设置模式之一,指在这个项目运行过程中一 个类的对象只会实例化一次.一般,工厂类的对象都是单例模式.非单例模式叫多 ...
- CSS 块元素、内联元素、内联块元素三者的区别与转换
三种元素 块元素 内联元素 内联块元素 元素之间的转换 三种元素 元素就是标签,布局中常用的有三种标签,块元素.内联元素.内联块元素. 了解这三种元素的特性,才能熟练的进行页面布局. 块元素 块元素, ...
- java基础 之 从Class.forName()跟.class的区别看类的初始化
代码如下: public class Test { public static void main(String[] args) throws Exception { System.out.print ...
- 浅析java中ClassLoader如何加载Class
我的博客地址:https://blog.csdn.net/qq_41907991 ClassLoader是一个经常出现又让很多人望而却步的词.本文试图以最浅显易懂的方式来讲解ClassLoader,希 ...
- java基础篇 之 foreach探索
我们看下这段代码: public class Main { public static void main(String[] args) { List list = new ArrayList(); ...
- NetCore项目实战篇05---添加Ocelot网关并集成identity server4认证
今天来给我们的项目增加API网关,使用Ocelot. 它是系统暴露在外部的一个访问入口,这个有点像代理访问的家伙,就像一个公司的门卫承担着寻址.限制进入.安全检查.位置引导.等等功能.同时我们还要在网 ...