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

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

getimagesize получает только ширину и высоту.

и filesize стал waring .

 $imgsize=filesize("http://img.ruphp.com/image-size/2564.jpg"); echo $imgsize; 

Warning: filesize() [function.filesize]: stat failed for http://img.ruphp.com/image-size/2564.jpg

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

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

 $img = get_headers("http://img.ruphp.com/image-size/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 ?> 

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

Вот пример:

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