php获取远程文件大小

发布时间:2019-08-25编辑:脚本学堂
本文主要分享了php获取远程文件大小的四种方法,有需要的朋友参考下。

获取本地文件大小filesize()即可。
如何获取远程文件的大小?

本文偏好几种php获取远程文件的大小的方法。

方法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.1rn");   
        fputs($fp,"Host:$url[host]rnrn");   
        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.jb200.com/index.html");   
echo strlen($fCont)/1024;   

以上四种方法如何选择呢?可以参照如下标准:
curl > fsock > file_get_contents > getheader