cleey
望着那一丝海线,若隐若现。落日下的海霞,数不尽的美,看不完的醉
判断文件是否存在
在项目开发过程中,有这么一个需求,关于软件的下载地址:
优先级,从高到低
1、区域软件下载地址优先;
2、然后全国统一下载地址最后;

这样出现一个问题,我们怎么最短的时间内判断,并指定软件下载路径。
所有的软件存放路径,规定统一位置,统一路径。所以我们已知两者的下载url。这里主要讨论怎么check第一个url是否存在。
我们尝试了,以下方法:

1、登录ftp服务器检查文件:

a、连接服务器ftp_connect() 
b、判断是否有文件大小ftp_size();


要是服务器连不上,这个就是龟速。。。。
看来得换个方法

2、curl远程地址,看结果是否为200

a、连接curl_setopt()  
b、curl文件地址curl_exec($curl)
c、查看状态码是否为200


貌似很快,有结果,但是发现如果区域用的云盘地址,云盘地址在请求错误,服务器也会给你返回一个结果,结果也是200。
又重新换方法
.......
在各种方法试完了以后发现...

3、fopen
fopen就行了,我想说次奥
fopen远程地址,能打开,就代表存在就行了。速度也快,效果也好。
汗死,做了那么多操作,还是给贴出,几个方法的代码:
第一个 ftp:

private function check_remote_ftp_file_exists($url,$fname){
// $url = "10.12.255.37";
$url = "10.12.255.37";
$usr = '1';
$pwd = '2';
$fname = '3';

$conn = @ftp_connect($url) or die("Could not connect");
@ftp_login($conn,$usr,$pwd);

$mod = @ftp_size($conn,$fname);
@ftp_close($conn);
if( $mod == -1) return false;
return true;
}


第二个 curl:

private function check_remote_http_file_exists($url){
$curl = curl_init($url);
// 不取回数据
curl_setopt($curl, CURLOPT_NOBODY, true);
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'GET');
// @curl_setopt($curl, CUROPT_RETURNTRANSFER,1);
// 发送请求
$result = @curl_exec($curl);
var_dump($result);
$found = false;
// 如果请求没有发送失败
if ($result !== false){
// 再检查http响应码是否为200
$statusCode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
// $statusCode=curl_exec($curl);
// var_dump($statusCode);
if ($statusCode == 200){
$found = true;
}
}
curl_close($curl);
return $found;
}


第三个fopen,成功实现功能的:

private function check_file_info($url){
// $url = 'http://www.baidu.com';
$fp = @fopen($url,'r');
if( !$fp ){return -1;}
@fclose($fp);
return 1;
}



大家还有好的方法欢迎交流。。。
<< 上一篇 Wordpress缩略图 WordPress获取文章所有信息 下一篇 >>
文章标签
随意 | Created At 2014 By William Clinton | 蜀ICP备14002619号-4 |