Php 如何获取远程映像文件大小?

Php 如何获取远程映像文件大小?,php,Php,我正在尝试获取远程图像文件大小 但我得到了这个错误: 警告:filesize():的stat失败 未知文件大小 " 这是我试图获取图像大小(MB)的代码 $res= formatFilebytes("http://mfastore.com/_store/user_data/9fc8022_310/C/hydrangeas.jpg","MB"); echo $res; function formatFilebytes($file, $type) { switch($type){ case

我正在尝试获取远程图像文件大小

但我得到了这个错误: 警告:filesize():的stat失败 未知文件大小 "

这是我试图获取图像大小(MB)的代码

    $res= formatFilebytes("http://mfastore.com/_store/user_data/9fc8022_310/C/hydrangeas.jpg","MB");
echo $res;

function formatFilebytes($file, $type)
{
switch($type){
case "KB":
$filesize = filesize($file) * .0009765625; // bytes to KB
break;
case "MB":
$filesize = (filesize($file) * .0009765625) * .0009765625; // bytes to MB
break;
case "GB":
$filesize = ((filesize($file) * .0009765625) * .0009765625) * .0009765625; // bytes to GB
break;
}
if($filesize <= 0){
return $filesize = 'unknown file size';}
else{return round($filesize, 2).' '.$type;}
}
$res=formatFilebytes(“http://mfastore.com/_store/user_data/9fc8022_310/C/hydrangeas.jpg“,”MB“;
echo$res;
函数formatFilebytes($file,$type)
{
交换机($类型){
案例“KB”:
$filesize=filesize($file)*.0009765625;//字节到KB
打破
案例“MB”:
$filesize=(filesize($file)*.0009765625)*.0009765625;//字节到MB
打破
案例“GB”:
$filesize=((filesize($file)*.0009765625)*.0009765625)*.0009765625;//字节到GB
打破
}
如果($filesize请尝试此方法

$image_header = get_headers("http://mfastore.com/_store/user_data/9fc8022_310/C/hydrangeas.jpg", true);
$size = $image_header["Content-Length"];

这是对我有效的解决方案

 $url = 'http://mfastore.com/_store/user_data/9fc8022_310/C/hydrangeas.jpg';

echo getRemoteFilesize($url);

function getRemoteFilesize($url, $formatSize = true)
{
    $head = array_change_key_case(get_headers($url, 1));
    // content-length of download (in bytes), read from Content-Length: field
    $clen = isset($head['content-length']) ? $head['content-length'] : 0;

    // cannot retrieve file size, return "-1"
    if (!$clen) {
        return -1;
    }

    if (!$formatSize) {
        return $clen; // return size in bytes
    }

    $size = $clen;
    switch ($clen) {
        case $clen < 1024:
            $size = $clen .' B'; break;
        case $clen < 1048576:
            $size = round($clen / 1024, 2) .' KiB'; break;
        case $clen < 1073741824:
            $size = round($clen / 1048576, 2) . ' MiB'; break;
        case $clen < 1099511627776:
            $size = round($clen / 1073741824, 2) . ' GiB'; break;
    }

    return $size; // return formatted size
}
$url='1!'http://mfastore.com/_store/user_data/9fc8022_310/C/hydrangeas.jpg';
echo getRemoteFilesize($url);
函数getRemoteFilesize($url,$formatSize=true)
{
$head=array_change_key_case(get_headers($url,1));
//下载的内容长度(字节),从内容长度:字段读取
$clen=isset($head['content-length'])?$head['content-length']:0;
//无法检索文件大小,返回“-1”
如果(!$clen){
返回-1;
}
如果(!$formatSize){
return$clen;//返回字节大小
}
$size=$clen;
交换机($clen){
案例$clen<1024:
$size=$clen.'B';break;
案例$clen<1048576:
$size=round($clen/1024,2)。'KiB';break;
案例$clen<1073741824:
$size=round($clen/1048576,2)。'MiB';break;
案例$clen<109951162776:
$size=round($clen/1073741824,2)。'GiB';break;
}
return$size;//返回格式化大小
}

我相信这会对您有所帮助,这是一个示例:

$filesize = filesize($folder_url . $file) * .0009765625; // bytes to KB

值得注意的是,远程服务器没有义务返回内容长度,
$image\u头[“Content Length”]
在这种情况下可能没有定义。