php как получить размер веб-изображения в КБ?

php как получить размер веб-изображения в КБ?

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

есть ли другой способ получить веб-размер изображения в КБ?

7 ответов


за исключением выполнения полного 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

убедитесь, что разрешения установлены правильно на картинку и что путь тоже правильный. Вам нужно будет применить некоторую математику для преобразования из байтов в КБ, но после этого вы должны быть в хорошей форме!


Не уверен в использовании filesize() для удаленных файлов, но есть хорошие фрагменты на php.net хотя об использовании cURL.

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


вот хорошая ссылка на filesize ()

вы не можете использовать filesize () для получения информации об удаленном файле. Сначала он должен быть загружен или определен другим методом

использование Curl вот хороший метод:

учебник


вы также можете использовать эту функцию

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

вы можете получить размер файла с помощью функции get_headers (). Используйте ниже код:

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