您的位置:首页 > 编程语言 > PHP开发

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

2013-09-05 18:33 911 查看
php有很多方法可以获取远程文件大小的哦,最常用的就有fsockopen、file_get_contents、curl函数哦,下面我来给各位总结一下。

1、fsockopen

代码如下




function getFileSize($url){

$url = parse_url($url);

if($fp = @fsockopen($url['host'],empty($url['port'])?80:$url['port'],$error)){

fputs($fp,"GET ".(empty($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.php100.comnet/")

?>


2、使用file_get_contents()

代码如下




$file = file_get_contents($url);

echo strlen($file);

?>


3. 使用get_headers()

代码如下




$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

代码如下




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 '

head-->'.$head.'<----end

';



// 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;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: