首页 > php文件操作 > PHP 获取远程文件大小常用方法总结

PHP 获取远程文件大小常用方法总结

php有很多方法可以获取远程文件大小的,最常用的就有fsockopen、file_get_contents、curl函数,下面我来给各位总结一下.


1、fsockopen,代码如下:


<?php
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;
            } else if (preg_match('/Content-Length:(.*)/si', $tmp, $arr)) {
                return trim($arr[1]);
            }
        }
        return null;
    } else {
        return null;
    }
}
//调用方法
echo getFileSize("http://www.phprm.com/")
?>

2、使用file_get_contents(),代码如下:


<?php 
$file = file_get_contents($url); 
echo strlen($file); 
?>

3. 使用get_headers(),代码如下:

<?php 
$header_array = 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  
)  
$size = $header_array['Content-Length']; 
echo $size; 
?>

4.curl,代码如下:

<?php
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]))  
    { //开源代码phprm.com 
        $size = $matches[1];  
    }  
    else  
    {  
        $size = 'unknown';  
    }  
    //$last=round($size/(1024*1024),3);  
    //return $last.' MB';  
    return $size;  
}


本文地址:http://www.phprm.com/wenjian/fs5543.html

转载随意,但请附上文章地址:-)

标签:php获取文件大小 php远程文件

发表留言