web-dev-qa-db-fra.com

php comment obtenir une taille d'image web en ko?

php comment obtenir une taille d'image web en ko?

getimagesize n'obtient que la largeur et la hauteur.

et filesize cause 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

Existe-t-il un autre moyen d'obtenir une taille d'image Web en ko?

17
fish man

À moins de faire une requête HTTP complète, il n’existe pas de moyen simple:

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

Vous pouvez probablement utiliser cURL mais pour envoyer une demande plus légère HEAD à la place .

18
mario
<?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
?>
5
Morgan Delaney

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

Voici un exemple:

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

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

3

Pas sûr d'utiliser filesize() pour les fichiers distants, mais il existe de bons extraits sur php.net mais concernant l'utilisation de cURL. 

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

2
Nick Pyett

Vous pouvez aussi 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;
}
?>
1
Sandeep Tawaniya

Voici un bon lien concernant filesize ()

Vous ne pouvez pas utiliser filesize () pour récupérer des informations sur un fichier distant. Il doit d'abord être téléchargé ou déterminé par une autre méthode

En utilisant Curl, voici une bonne méthode:

Didacticiel

1
lockdown

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";
0
Ahmad Vaqas Khan