2011-06-07 13 views
17

php, jak uzyskać rozmiar obrazu w kb?php, jak uzyskać rozmiar obrazu internetowego w kb?

getimagesize tylko uzyskać szerokość i wysokość.

i filesize spowodowały 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

Czy jest jakiś inny sposób, aby uzyskać rozmiar obrazu WWW w KB?

+1

możliwe duplikat [PHP zdalnego format bez pobierania pliku] (http://stackoverflow.com/questions/2602612/php-remote-file-size-without-downloading-file) – deceze

+0

To wydaje się być powiązane: [link] http://stackoverflow.com/questions/2145021/php-getimagesize-alternatives-without-javascript [/ link] – knurdy

Odpowiedz

18

Krótki robić pełną żądania HTTP, nie istnieje prosty sposób:

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

Najprawdopodobniej można użyć numeru cURL, aby wysłać numer lighter HEAD request instead.

+0

Świetne, get_headers działają szybciej. Dzięki. –

+2

Upewnij się, że twój klient HTTP nie wysyła żadnych nagłówków mówiących o tym, że akceptuje gzipped odpowiedzi HTTP, inaczej "Content-Length" będzie niepoprawny, ponieważ serwer wyśle ​​skompresowane dane z powrotem. – Darien

+0

@Darien: Znakomity połów! Na szczęście 'get_headers' wysyła całkiem proste żądanie HTTP/1.0. Ale w przypadku cURL wymagałoby to większej staranności. – mario

3

To brzmi jak problem uprawnień, ponieważ funkcja filesize() powinna działać poprawnie.

Oto przykład:

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

Upewnij się, że uprawnienia są ustawione poprawnie na obrazie i że ścieżka jest poprawna. Będziesz musiał zastosować trochę matematyki, aby przekonwertować bajty na KB, ale po wykonaniu tej czynności powinieneś być w dobrej formie!

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

Oto dobry związek czasowo rozmiar pliku()

Nie można używać filesize() w celu pobrania informacji o pliku zdalnego. W pierwszej kolejności należy pobrać lub ustalona inną metodą

Korzystanie Curl tutaj jest dobra metoda:

Tutorial

1

Można użyć również tę funkcję

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

można uzyskać rozmiaru pliku przy użyciu funkcji() get_headers. Używać kodem:

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