20

php如何获取以kb为单位的网络图像大小?

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 为单位的网络图像大小?

4

7 回答 7

25

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

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

但是,您可以使用cURL发送更轻松的HEAD请求来代替

于 2011-06-07T23:27:37.990 回答
6
<?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
?>
于 2011-06-07T23:26:50.937 回答
3

不确定是否使用filesize()远程文件,但 php.net 上有很好的片段,尽管关于使用 cURL。

http://www.php.net/manual/en/function.filesize.php#92462

于 2011-06-07T23:30:12.697 回答
2

这听起来像是一个权限问题,因为 filesize() 应该可以正常工作。

这是一个例子:

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

确保在图像上正确设置了权限,并且路径也正确。您将需要应用一些数学来从字节转换为 KB,但这样做之后您应该处于良好状态!

于 2011-06-07T23:26:14.323 回答
1

这是关于 filesize() 的一个很好的链接

您不能使用 filesize() 来检索远程文件信息。必须先下载或通过其他方法确定

在这里使用 Curl 是一个很好的方法:

教程

于 2011-06-07T23:27:19.970 回答
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;
}
?>
于 2013-12-16T15:32:22.120 回答
0

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

    $image = get_headers($url, 1);
    $bytes = $image["Content-Length"];
    $mb = $bytes/(1024 * 1024);
    echo number_format($mb,2) . " MB";
于 2016-08-16T06:13:55.100 回答