您的位置:首页 > 编程语言 > PHP开发

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

2015-09-20 00:56 706 查看

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


如果需求的操作是依赖于远程文件是否存在,存在后再进行操作,则可以使用今天提供的这个函数。

一句话的事情,下面直接上高清无MSK的精妙代码!



[b]功能函数
[/b]

获得当前请求的页面路径(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";
?>


[b]插件支持
[/b]

方法一(需要开启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,就说明文件存在。
?>


方法二([b]需要服务器支持curl组件):[/b]

<?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,说明存在。

?>


[b]结束语
[/b]

本讲利用两种方式介绍了判断远程文件是否存在,大家可以根据项目情况进行使用。

未完,待更新...



本站文章为 宝宝巴士 SD.Team 原创,转载务必在明显处注明:(作者官方网站: 宝宝巴士 )
转载自【宝宝巴士SuperDo团队】 原文链接: /article/6669203.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: