2010-09-27 2 views
7

J'ai été googleing mais tout ce que je reçois est getimagesize et filesize. Getimagesize dosent obtenir la taille KB juste la largeur et la hauteur qui n'est pas ce que je cherche.
me donner filesize le message Attention: taille du fichier() [function.filesize]: stat a échoué pour
le fichier en question est un fichier 51kb .jpgphp obtenir la taille KB d'une image

$imgsize=filesize("http://localhost/projects/site/schwe/user/1/1.jpg"); 

ne fonctionne pas,

Comment puis-je accomplir cela?

+0

Quelle version de PHP utilisez-vous? – pascal

+0

Peut-être voir [cette question] (http://stackoverflow.com/questions/2203679/php-filesize-works-on-all-but-one-file-gives-stat-failed-error) – pascal

Répondre

7

Vous ne pouvez pas obtenir la taille de fichier des éléments distants, soit donner un chemin relatif sur votre système OU faire un file_get_contents() pour obtenir d'abord le contenu . Ainsi, au lieu de http: //, faites un filesize('/path/to/local/system'). Assurez-vous qu'il est lisible par le processus PHP

+0

ouais, vrai, je juste remarqué, merci. J'aurais dû y penser d'avance, im un tel idiot. – Macao

+0

Qu'en est-il d'une astuce dans les documents ['filesize()' sur PHP.net] (http://php.net/manual/fr/function.filesize.php)? Il dit: "Depuis PHP 5.0.0, cette fonction peut aussi être utilisée avec certains wrappers d'URL Se référer aux protocoles et wrappers supportés pour déterminer quels wrappers supportent la famille de fonctionnalités stat()". Semble, vous pouvez ** utiliser ** des éléments distants 'filesize()'. Il suffit de configurer correctement votre serveur et votre analyseur PHP (la sécurité est importante). – trejder

4

Vous ne pouvez pas rechercher la taille de fichier d'un fichier distant comme ça. Il est destiné à regarder la taille de fichier des fichiers locaux.

Par exemple ...

$imgsize = filesize('/home/projects/site/1.jpg'); 
+0

Voir mon commentaire à la réponse de Stewie. Vous ** pouvez ** utiliser la taille des fichiers pour un fichier distant, si seulement votre environnement et votre serveur sont correctement configurés. – trejder

0

filesize prend le nom du fichier comme argument pas une URL et retourne la taille du fichier en octets. Vous pouvez diviser la valeur de retour par 1024 pour obtenir la taille en Ko.

+0

Voir mon commentaire à la réponse de Stewie. Vous ** pouvez ** utiliser la taille des fichiers pour un fichier distant, si seulement votre environnement et votre serveur sont correctement configurés. – trejder

1

filesize() est la fonction à utiliser. Il pourrait être un échec parce que

  1. Vous essayez d'obtenir une adresse URL wrappers Web & ne peuvent pas être activés
  2. Cette URL est pas valide.

Si vous essayez d'exécuter filesize() sur un fichier local, référencez le chemin du système de fichiers, et non une URL Web.

0

J'ai eu le même problème, que j'ai résolu comme ceci. Je ne sais pas comment il est optimal, mais il fonctionne pour moi:

getimagesize("http://localhost/projects/site/schwe/user/1/1.jpg"); 

$file_size = $file[0]*$file[1]*$file["bits"]; 
+0

Si filesize() ne fonctionne pas avec les ressources HTTP, getimagesize() échouera également. Le calcul de la taille de fichier en multipliant les propriétés d'image non compressées entraînera également de mauvais résultats. – Sven

1

Ou vous pouvez aussi faire quelque chose comme:

$header = get_headers($url); 
foreach ($header as $head) { 
    if (preg_match('/Content-Length: /', $head)) { 
     $size = substr($head, 15);      
    } 
} 
Questions connexes