[转]php判断远程文件是否存在

我们知道file_exists判断远程文件是否存在时是无效的,
哪果用fopen会出现警告,虽然可以加@屏蔽,但总觉得不太好。
这时我们可以通过利用fsockopen()函数判断,
收集了一个小函数,如果文件存在返回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/r/n";
$request_str .= "Host: ".$host."/r/n";
$request_str .= "Connection: Close/r/n/r/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;
}
//测试代码
$str_url = 'http://.....000.jpg';
$exits = remote_file_exists($str_url);
if($exits){
echo 'yes';
}else{
echo 'no';
}

,实际中我用fopen,get_headers,等方法测试过,fsockopen成功率最高,fopen,get_header均会出现http request faild请求失败。
$fp = fopen( $str_url, "r" );
print_r(get_headers($str_url));
但是用socket的注意,如果文件太大,可能会导致加载很慢,等待时间很长。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值