最新消息:本站所有跳转向bbs.ykit.cn的附件将全面停止,附件已转移到https://www.qingsj.com

php获取远程文件大小

PHP 有客 55浏览

获取本地文件大小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;

转载请注明:有客帮 » php获取远程文件大小