php获取文件大小多种方法(包括远程文件大小)

发布时间:2020-03-11编辑:脚本学堂
php取得文件大小的几种方法,以及php获取远程文件大小的几个例子,列举了filesize方法、file_get_contents方法、curl方式取得文件大小的方法与例子。

例1:
 

复制代码 代码示例:
<?php
$file = 'data.txt';
$bytes = filesize('$file');
echo 'File '.basename($file).' is $bytes bytes, or '.round($bytes / 1024, 2).' kilobytes.';
?>

php获取文件大小的方法

例2:
 

复制代码 代码示例:
static function convert($size) {
  $unit=array('b','kb','mb','gb','tb','pb');
  return @round($size/pow(1024,($i=floor(log($size,1024)))),2).' '.$unit[$i];
}

例3:
 

复制代码 代码示例:
/**
 * Returns a human readable filesize
 */
function HumanReadableFilesize($size) {
   $mod = 1024;
   $units = explode(' ','B KB MB GB TB PB');
   for ($i = 0; $size > $mod; $i++) {
  $size /= $mod;
   }
   return round($size, 2) . ' ' . $units[$i];
}

php获取远程文件大小

以上介绍了php获取文件大小的方法,只能获取本地文件大小,使用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,php 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.1rn");
fputs($fp,"Host:$url[host]rnrn");
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.xingzuo51.com/1.html");
echo strlen($fCont)/1024;

以上四种方法
curl > fsock > file_get_contents > getheader