簡體   English   中英

php 如何以 kb 為單位獲取 web 圖像大小?

[英]php how to get web image size in kb?

php 如何以 kb 為單位獲取 web 圖像大小?

getimagesize只獲取寬度和高度。

和文件大小waring filesize

$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

有沒有其他方法可以獲得 web 圖像大小(以 kb 為單位)?

沒有做一個完整的 HTTP 請求,沒有簡單的方法:

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

您可以使用cURL代替發送較輕的HEAD請求

<?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
?>

這聽起來像是一個權限問題,因為 filesize() 應該可以正常工作。

這是一個例子:

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

確保在圖像上正確設置了權限,並且路徑也正確。 您將需要應用一些數學來從字節轉換為 KB,但這樣做之后您應該處於良好狀態!

不確定是否將filesize()用於遠程文件,但 php.net 上有關於使用 cURL 的很好的片段。

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

您也可以使用這個 function

<?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;
}
?>

這是關於 filesize() 的一個很好的鏈接

您不能使用 filesize() 來檢索遠程文件信息。 必須先下載或通過其他方法確定

在這里使用 Curl 是一個很好的方法:

教程

您可以使用 get_headers() function 獲取文件大小。 使用以下代碼:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM