php获取远程文件大小



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

方法1:get_headers

[php] view plaincopy

  1. <?php    

  2. get_headers($url,true);    

  3.     

  4. //返回结果    

  5. Array    

  6. (    

  7.     [0] => HTTP/1.1 200 OK    

  8.     [Date] => Sat, 29 May 2004 12:28:14 GMT    

  9.     [Server] => Apache/1.3.27 (Unix)  (Red-Hat/Linux)    

  10.     [Last-Modified] => Wed, 08 Jan 2003 23:11:55 GMT    

  11.     [ETag] => "3f80f-1b6-3e1cb03b"    

  12.     [Accept-Ranges] => bytes    

  13.     [Content-Length] => 438    

  14.     [Connection] => close    

  15.     [Content-Type] => text/html    

  16. )    

  17. ?>    

 

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

方法2:curl

[php] view plaincopy

  1. function remote_filesize($uri,$user='',$pw='')    

  2. {    

  3.     // start output buffering    

  4.     ob_start();    

  5.     // initialize curl with given uri    

  6.     $ch = curl_init($uri);    

  7.     // make sure we get the header    

  8.     curl_setopt($ch, CURLOPT_HEADER, 1);    

  9.     // make it a http HEAD request    

  10.     curl_setopt($ch, CURLOPT_NOBODY, 1);    

  11.     // if auth is needed, do it here    

  12.     if (!emptyempty($user) && !emptyempty($pw))    

  13.     {    

  14.         $headers = array('Authorization: Basic ' . base64_encode($user.':'.$pw));    

  15.         curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);    

  16.     }    

  17.     $okay = curl_exec($ch);    

  18.     curl_close($ch);    

  19.     // get the output buffer    

  20.     $head = ob_get_contents();    

  21.     // clean the output buffer and return to previous    

  22.     // buffer settings    

  23.     ob_end_clean();    

  24.     

  25.     echo '<br>head-->'.$head.'<----end <br>';    

  26.     

  27.     // gets you the numeric value from the Content-Length    

  28.     // field in the http header    

  29.     $regex = '/Content-Length:\s([0-9].+?)\s/';    

  30.     $count = preg_match($regex$head$matches);    

  31.     

  32.     // if there was a Content-Length field, its value    

  33.     // will now be in $matches[1]    

  34.     if (isset($matches[1]))    

  35.     {    

  36.         $size = $matches[1];    

  37.     }    

  38.     else    

  39.     {    

  40.         $size = 'unknown';    

  41.     }    

  42.     //$last=round($size/(1024*1024),3);    

  43.     //return $last.' MB';    

  44.     return $size;    

  45. }    


 

方法3:socket

[php] view plaincopy

  1. function getFileSize($url)    

  2. {    

  3.     $url = parse_url($url);    

  4.     if($fp = @fsockopen($url['host'],emptyempty($url['port'])?80:$url['port'],$error))    

  5.     {    

  6.         fputs($fp,"GET ".(emptyempty($url['path'])?'/':$url['path'])." HTTP/1.1\r\n");    

  7.         fputs($fp,"Host:$url[host]\r\n\r\n");    

  8.         while(!feof($fp))    

  9.         {    

  10.             $tmp = fgets($fp);    

  11.             if(trim($tmp) == '')    

  12.             {    

  13.                 break;    

  14.             }    

  15.             elseif(preg_match('/Content-Length:(.*)/si',$tmp,$arr))    

  16.             {    

  17.                 return trim($arr[1]);    

  18.             }    

  19.         }    

  20.         return null;    

  21.     }    

  22.     else    

  23.     {    

  24.         return null;    

  25.     }    

  26. }    


 

方法4:file_get_contents

[php] view plaincopy

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

  2. echo strlen($fCont)/1024;    



评论



分享

最新加入

最新评论

bestphper: 就是就是 查看原文 01月12日 14:32
╰ゝ牵手丶永恒: 不错学习一下,只有不断的共享祖国才会更强大!哈哈 查看原文 01月08日 17:06





作者:Stubborn 京ICP备18062026号-1