PHP獲取本地文件、遠程文件的大小
php中獲取文件大小時要考慮兩種情況:本地文件、遠程文件,下面總結一下開發過程中使用的處理方法。
一、獲取本地文件的大小
直接使用filesize() 函數,可以返回指定文件的大小。
若成功,則返回文件大小的字節數。若失敗,則返回 false 并生成一條 E_WARNING 級的錯誤。
二、獲取遠程文件的大小
遠程文件的大小需要打開遠程的文件流,處理的方式有四種:
1,get_headers
get_headers($url,true); 返回結果如圖所示:
2,file_get_contents
$file = file_get_content($url); echo strlen($file)/1024;
3,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;
} 4,socket方式
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.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;
}
} 以上是開發中使用過的四種方式,處理速度個人認為socket的方式較快,get_headers、file_get_contents比較慢。大伙根據實際情況來選擇合適的處理方式吧。
來自:http://my.oschina.net/xtfjt1988/blog/368448
本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!