PHP, как получить размер веб-изображения в кб? - PullRequest
17 голосов
/ 08 июня 2011

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 ]

19 голосов
/ 08 июня 2011

Если не выполнить полный HTTP-запрос, простого способа нет:

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

Скорее всего, вы можете использовать cURL, но вместо этого отправлять запрос легче HEAD .

5 голосов
/ 08 июня 2011
<?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
?>
3 голосов
/ 08 июня 2011

Это звучит как проблема с разрешениями, потому что filesize () должен работать очень хорошо.

Вот пример:

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

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

2 голосов
/ 08 июня 2011

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

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

1 голос
/ 16 декабря 2013

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

<?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;
}
?>
1 голос
/ 08 июня 2011

Вот хорошая ссылка относительно размера файла ()

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

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

Учебное пособие

0 голосов
/ 16 августа 2016

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

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