2011-06-07 47 views
17

php如何获得kb中的web图像大小?php如何获得kb中的web图像大小?

getimagesize只得到宽度和高度。

filesize引起的waring

$imgsize=filesize("http://static.adzerk.net/Advertisers/2564.jpg"); 
echo $imgsize; 

Warning: filesize() [function.filesize]: stat failed for http://static.adzerk.net/Advertisers/2564.jpg

是否有任何其他的方式来获得以KB为Web图像的大小?

+1

[PHP:远程文件的大小,而无需下载文件]中可能重复(http://stackoverflow.com/questions/2602612/php-remote-file-size-without-downloading-file) – deceze 2011-06-07 23:25:29

+0

这似乎是相关的:[link] http://stackoverflow.com/questions/2145021/php-getimagesize-alternatives-without-javascript [/ link] – knurdy 2011-06-07 23:27:40

回答

18

短做一个完整的HTTP请求,有没有简单的方法:

$img = get_headers("http://static.adzerk.net/Advertisers/2564.jpg", 1); 
print $img["Content-Length"]; 

然而,您可能会利用cURL发送lighter HEAD request instead

+0

很好,get_headers运行得更快。谢谢。 – 2011-06-07 23:32:18

+2

确保你的HTTP客户端没有发送任何头文件,说它接受gzip的HTTP响应,否则'Content-Length'将会出错,因为服务器会发送压缩的数据。 – Darien 2011-06-07 23:39:14

+0

@Darien:非常棒!幸运的是'get_headers'发送一个非常简单的HTTP/1.0请求。但对于卷曲,这需要更多的努力。 – mario 2011-06-07 23:48:38

3

这听起来像一个权限问题,因为filesize()应该工作得很好。

下面是一个例子:

php > echo filesize("./9832712.jpg"); 
1433719 

确保权限设置正确的图像并且路径也是正确的。你将需要应用一些数学转换从字节到KB,但做完后你应该保持良好状态!

5
<?php 
$file_size = filesize($_SERVER['DOCUMENT_ROOT']."/Advertisers/2564.jpg"); // Get file size in bytes 
$file_size = $file_size/1024; // Get file size in KB 
echo $file_size; // Echo file size 
?> 
1

这里是一个很好的关于链接文件大小()

不能使用文件大小()来检索远程文件信息。它首先必须通过另一种方法

使用此卷曲被下载或确定是一个很好的方法:

Tutorial

1

您也可以使用此功能

<?php 
$filesize=file_get_size($dir.'/'.$ff); 
$filesize=$filesize/1024;// to convert in KB 
echo $filesize; 


function file_get_size($file) { 
    //open file 
    $fh = fopen($file, "r"); 
    //declare some variables 
    $size = "0"; 
    $char = ""; 
    //set file pointer to 0; I'm a little bit paranoid, you can remove this 
    fseek($fh, 0, SEEK_SET); 
    //set multiplicator to zero 
    $count = 0; 
    while (true) { 
     //jump 1 MB forward in file 
     fseek($fh, 1048576, SEEK_CUR); 
     //check if we actually left the file 
     if (($char = fgetc($fh)) !== false) { 
      //if not, go on 
      $count ++; 
     } else { 
      //else jump back where we were before leaving and exit loop 
      fseek($fh, -1048576, SEEK_CUR); 
      break; 
     } 
    } 
    //we could make $count jumps, so the file is at least $count * 1.000001 MB large 
    //1048577 because we jump 1 MB and fgetc goes 1 B forward too 
    $size = bcmul("1048577", $count); 
    //now count the last few bytes; they're always less than 1048576 so it's quite fast 
    $fine = 0; 
    while(false !== ($char = fgetc($fh))) { 
     $fine ++; 
    } 
    //and add them 
    $size = bcadd($size, $fine); 
    fclose($fh); 
    return $size; 
} 
?> 
0

您可以通过使用get_headers()函数来获取文件的大小。使用下面的代码:

$image = get_headers($url, 1); 
    $bytes = $image["Content-Length"]; 
    $mb = $bytes/(1024 * 1024); 
    echo number_format($mb,2) . " MB"; 
相关问题