2011-06-07 4 views
17

php comment obtenir la taille de l'image web en kb?php comment obtenir la taille de l'image web en kb?

getimagesize seulement obtenir la largeur et la hauteur.

et filesize causé 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

est-il un autre moyen d'obtenir une taille d'image web en kb?

+1

double possible de [PHP: la taille du fichier à distance sans téléchargement du fichier] (http://stackoverflow.com/questions/2602612/php-remote-file-size-without-downloading-file) – deceze

+0

Cela semble être lié: [link] http://stackoverflow.com/questions/2145021/php-getimagesize-alternatives-without-javascript [/ link] – knurdy

Répondre

18

Court de faire une requête HTTP complète, il n'y a pas moyen facile:

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

Vous pouvez cependant utiliser cURL pour envoyer un lighter HEAD request instead.

+0

génial, les get_headers s'exécutent plus vite. Merci. –

+2

Assurez-vous que votre client HTTP n'envoie aucun en-tête indiquant qu'il accepte les réponses HTTP gzippées, sinon le 'Content-Length' sera erroné car le serveur enverra des données compressées. – Darien

+0

@Darien: Excellente prise! Heureusement, 'get_headers' envoie une requête HTTP/1.0 assez simple. Mais pour CURL cela aurait besoin de plus de diligence. – mario

3

Cela ressemble à un problème d'autorisations car filesize() devrait fonctionner correctement.

est un exemple:

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

Assurez-vous que les autorisations sont définies correctement sur l'image et que le chemin est aussi correct. Vous devrez appliquer quelques maths pour convertir des octets en KB mais après cela vous devriez être en bonne forme!

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

Voici un bon lien en ce qui concerne la taille du fichier()

Vous ne pouvez pas utiliser la taille du fichier() pour récupérer des informations de fichiers distant. Il faut d'abord être téléchargé ou déterminé par une méthode

L'utilisation ici Curl est une bonne méthode:

Tutorial

1

Vous pouvez également utiliser cette fonction

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

Vous pouvez obtenir la taille du fichier en utilisant la fonction get_headers(). Utilisez le code ci-dessous:

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