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?
À 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 .
<?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
?>
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!
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.
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;
}
?>
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:
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";