php获取远程文件大小

 
获取本地文件大小filesize()就可以了,但是如何获取远程文件的大小呢? 这里介绍三个方法来获取远程文件的大小.

方法1:get_headers

<?php  
get_headers($url,true);  
  
//返回结果  
Array  
(  
    [0] => HTTP/1.1 200 OK  
    [Date] => Sat, 29 May 2004 12:28:14 GMT  
    [Server] => Apache/1.3.27 (Unix)  (Red-Hat/Linux)  
    [Last-Modified] => Wed, 08 Jan 2003 23:11:55 GMT  
    [ETag] => "3f80f-1b6-3e1cb03b"  
    [Accept-Ranges] => bytes  
    [Content-Length] => 438  
    [Connection] => close  
    [Content-Type] => text/html  
)  
?>  

 

此处可以直接根据Content-Length来获取到远程文件的大小了.

方法2:curl

function remote_filesize($uri,$user='',$pw='')  
{  
    // start output buffering  
    ob_start();  
    // initialize curl with given uri  
    $ch = curl_init($uri);  
    // make sure we get the header  
    curl_setopt($ch, CURLOPT_HEADER, 1);  
    // make it a http HEAD request  
    curl_setopt($ch, CURLOPT_NOBODY, 1);  
    // if auth is needed, do it here  
    if (!emptyempty($user) && !emptyempty($pw))  
    {  
        $headers = array('Authorization: Basic ' . base64_encode($user.':'.$pw));  
        curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);  
    }  
    $okay = curl_exec($ch);  
    curl_close($ch);  
    // get the output buffer  
    $head = ob_get_contents();  
    // clean the output buffer and return to previous  
    // buffer settings  
    ob_end_clean();  
  
    echo '<br>head-->'.$head.'<----end <br>';  
  
    // gets you the numeric value from the Content-Length  
    // field in the http header  
    $regex = '/Content-Length:\s([0-9].+?)\s/';  
    $count = preg_match($regex, $head, $matches);  
  
    // if there was a Content-Length field, its value  
    // will now be in $matches[1]  
    if (isset($matches[1]))  
    {  
        $size = $matches[1];  
    }  
    else  
    {  
        $size = 'unknown';  
    }  
    //$last=round($size/(1024*1024),3);  
    //return $last.' MB';  
    return $size;  
}  


 

方法3:socket

function getFileSize($url)  
{  
    $url = parse_url($url);  
    if($fp = @fsockopen($url['host'],emptyempty($url['port'])?80:$url['port'],$error))  
    {  
        fputs($fp,"GET ".(emptyempty($url['path'])?'/':$url['path'])." HTTP/1.1\r\n");  
        fputs($fp,"Host:$url[host]\r\n\r\n");  
        while(!feof($fp))  
        {  
            $tmp = fgets($fp);  
            if(trim($tmp) == '')  
            {  
                break;  
            }  
            elseif(preg_match('/Content-Length:(.*)/si',$tmp,$arr))  
            {  
                return trim($arr[1]);  
            }  
        }  
        return null;  
    }  
    else  
    {  
        return null;  
    }  
}  


 

方法4:file_get_contents

$fCont = file_get_contents("http://www.mg27.com/1.html");  
echo strlen($fCont)/1024;  


 

 

以上四种方法
curl > fsock > file_get_contents > getheader

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值