判断文件是否存在
在项目开发过程中,有这么一个需求,关于软件的下载地址:
优先级,从高到低
1、区域软件下载地址优先;
2、然后全国统一下载地址最后;
这样出现一个问题,我们怎么最短的时间内判断,并指定软件下载路径。
所有的软件存放路径,规定统一位置,统一路径。所以我们已知两者的下载url。这里主要讨论怎么check第一个url是否存在。
我们尝试了,以下方法:
1、登录ftp服务器检查文件:
要是服务器连不上,这个就是龟速。。。。
看来得换个方法
2、curl远程地址,看结果是否为200
貌似很快,有结果,但是发现如果区域用的云盘地址,云盘地址在请求错误,服务器也会给你返回一个结果,结果也是200。
又重新换方法
.......
在各种方法试完了以后发现...
3、fopen
fopen就行了,我想说次奥
fopen远程地址,能打开,就代表存在就行了。速度也快,效果也好。
汗死,做了那么多操作,还是给贴出,几个方法的代码:
第一个 ftp:
第二个 curl:
第三个fopen,成功实现功能的:
大家还有好的方法欢迎交流。。。
优先级,从高到低
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;
}
大家还有好的方法欢迎交流。。。