php获取文件大小的4种方法

jerry PHP 2015年11月18日 收藏
在网上找了4种获取文件大小的方法 记录起来。。。。
方法一:header
<?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   
    <STRONG>[Content-Length] => 438 </STRONG>  
    [Connection] => close   
    [Content-Type] => text/html   
)   
?>   


方法二
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;   
    }   
}  
方法三:
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;   
}   
方法四:
$fCont = file_get_contents("http://www.weiyeying.cn/");   
echo strlen($fCont)/1024;