2011-06-07 17 views
17

php come ottenere la dimensione dell'immagine web in kb?php come ottenere la dimensione dell'immagine web in kb?

getimagesize ottenere solo la larghezza e l'altezza.

e filesize causato 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

C'è un altro modo per ottenere un formato immagine Web in kb?

+1

possibile duplicato di [PHP: la dimensione del file remoto senza download di file] (http://stackoverflow.com/questions/2602612/php-remote-file-size-without-downloading-file) – deceze

+0

Questo sembra essere correlato: [link] http://stackoverflow.com/questions/2145021/php-getimagesize-alternatives-without-javascript [/ link] – knurdy

risposta

18

Breve di fare una richiesta HTTP completo, non v'è alcun modo semplice:

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

È possibile utilizzare probabilmente cURL per inviare un lighter HEAD request instead.

+0

great, get_headers correre più veloce. Grazie. –

+2

Assicurati che il tuo client HTTP non stia inviando alcuna intestazione dicendo che accetta risposte HTTP gzip, altrimenti "Content-Length" sarà errato perché il server invierà dati compressi. – Darien

+0

@Darien: cattura eccellente! Fortunatamente 'get_headers' invia una richiesta HTTP/1.0 piuttosto semplice. Ma per cURL questo avrebbe bisogno di più diligenza. – mario

3

Sembra un problema di autorizzazioni perché filesize() dovrebbe funzionare correttamente.

Ecco un esempio:

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

Assicurarsi che le autorizzazioni siano impostate correttamente l'immagine e che il percorso è anche corretto. Dovrai applicare dei calcoli matematici per convertire da byte a KB, ma dopo averlo fatto dovresti essere in buona forma!

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

Ecco un buon collegamento per quanto riguarda la dimensione del file()

Non è possibile utilizzare la dimensione del file() per recuperare le informazioni di file remoto. Si deve anzitutto essere scaricato o determinato con una procedura

Utilizzando Curl: ecco un buon metodo:

Tutorial

1

È possibile utilizzare anche questa funzione

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

È possibile ottenere la dimensione del file utilizzando la funzione() get_headers. Utilizzare sottostante Codice:

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