taille fichier sur serveur web distant

Eléphant du PHP | 149 Messages

11 avr. 2005, 13:50

Bonjour!

J'aimerais savoir comment je peux faire à partir d'un site hebergé en local pour connaitre la taille d'un fichier qui se trouve sur un serveur web distant sans passer par du FTP?

Merci pour votre aide :wink:

Manuscle
"Si tu travailles avec un marteau-piqueur pendant un tremblement de terre, désynchronise-toi, sinon tu travailles pour rien."
JC Vandamme.

Eléphant du PHP | 139 Messages

11 avr. 2005, 14:19

il y a ceci, que j'utilise et que j'ai trouvé sur le manuel en ligne de php.
<?php
function filesize_remote($url, $timeout=2)
{
   $url = parse_url($url);
  
   if ($fp = @fsockopen($url['host'], ($url['port'] ? $url['port'] : 80), $errno, $errstr, $timeout))
   {
       fwrite($fp, 'HEAD '.$url['path'].$url['query']." HTTP/1.0\r\nHost: ".$url['host']."\r\n\r\n");
       stream_set_timeout($fp, $timeout);
      
       while (!feof($fp))
       {
           $size = fgets($fp, 4096);
          
           if (stristr($size, 'Content-Length') !== false) // PHP5: stripos
           {
               $size = trim(substr($size, 16));
               break;
           }
       }
      
       fclose ($fp);
   }
  
   return is_numeric($size) ? intval($size) : false;
}
echo filesize_remote("URL_DU_FICHIER",0);
?>
sinon, a partir de php 5.x filesize("URL_DU_FICHIER") doit fonctionner !!! <- a vérifier

Eléphant du PHP | 149 Messages

11 avr. 2005, 15:12

Merci beaucoup je vais le tester!
"Si tu travailles avec un marteau-piqueur pendant un tremblement de terre, désynchronise-toi, sinon tu travailles pour rien."
JC Vandamme.

Eléphant du PHP | 149 Messages

11 avr. 2005, 15:40

Alors j'ai testé et je trouve ça super!

Par contre, j'ai un fichier qui fait 51,2 Ko sur le serveur, 52Ko sous l'explorer windows et la fonction me retourne 52440!

Qu'est-ce qui explique cette difference de taille bien qu'elle soit maigre?
"Si tu travailles avec un marteau-piqueur pendant un tremblement de terre, désynchronise-toi, sinon tu travailles pour rien."
JC Vandamme.

Eléphant du PHP | 281 Messages

11 avr. 2005, 15:44

ben peu être la méthode de calcul? ou les arrondit? je pense...

Mammouth du PHP | 859 Messages

11 avr. 2005, 15:45

C'est normal c'est en octet :

1ko = 1024 octets

donc

51,2ko = 52428,8 octets (soit 52ko en arrondi) ;)
Modifié en dernier par flitox le 11 avr. 2005, 15:46, modifié 2 fois.

Eléphant du PHP | 149 Messages

11 avr. 2005, 15:45

Tu peux aussi rajouter ce code dans la fonction si tu veux afficher en Go ou Mo ou Ko.....
global $size_unit;
if ($size >= 1073741824) 
{$size = round($size / 1073741824 * 100) / 100 . " Go";}
elseif ($size >= 1048576) 
{$size = round($size / 1048576 * 100) / 100 . " Mo";}
elseif ($size >= 1024) 
{$size = round($size / 1024 * 100) / 100 . " Ko";}
else 
{$size = $size . " o";} 
if($size==0) {$size="-";}
return $size;
"Si tu travailles avec un marteau-piqueur pendant un tremblement de terre, désynchronise-toi, sinon tu travailles pour rien."
JC Vandamme.

Eléphant du PHP | 149 Messages

11 avr. 2005, 15:47

C'est normal c'est en octet :

1ko = 1024 octets

donc

51,2ko = 52428,8 octets (soit 52ko en arrondi) ;)
Ah ok! Je m'en doutais mais je n'étais pas sûr!

Merci!
"Si tu travailles avec un marteau-piqueur pendant un tremblement de terre, désynchronise-toi, sinon tu travailles pour rien."
JC Vandamme.

Mammouth du PHP | 859 Messages

11 avr. 2005, 15:48

Je comprend pas là :

manuscle pose la question et se répond à lui-même...

La vérité serait-elle ailleurs?
Ah ok! Je m'en doutais mais je n'étais pas sûr!

Merci!
Mais c'est pas grave, t'es nul mais tu te soignes (cf. ta signature au cas où quelqu'un croirait que je te prends de haut) :lol:

Eléphant du PHP | 149 Messages

11 avr. 2005, 15:56

En fait,
J'ai dit que je m'en doutais car lorsque j'ai rajouté la portion de code qui affiche en Ko, j'ai eu le bon résultat, mais j'avais déjà posé la question sur le forum!

Voilà! :langue:
"Si tu travailles avec un marteau-piqueur pendant un tremblement de terre, désynchronise-toi, sinon tu travailles pour rien."
JC Vandamme.

Eléphant du PHP | 149 Messages

11 avr. 2005, 16:25

Par contre, j'aimerais que dans cette meme fonction je puisse retourner un message qui prévient au cas où le fichier n'est pas présent.

Est-ce possible avec les informations qui sont déjà présentes dans cette fonction?
"Si tu travailles avec un marteau-piqueur pendant un tremblement de terre, désynchronise-toi, sinon tu travailles pour rien."
JC Vandamme.

Mammouth du PHP | 859 Messages

11 avr. 2005, 16:28

$chemin = "fichier.zip";
$valide = @fopen($chemin, 'r');
Après à toi de mettre ta condition : si $valide est rempli, le fichier existe sinon il existe pas ;)

Eléphant du PHP | 149 Messages

11 avr. 2005, 16:46

Tout simplement!

j'ai fait comme ceci:
function filesize_remote($url, $timeout=2) {
	$valide = @fopen($url,'r');
	if (!$valide) {
	return "<span class=\"ko\">ATTENTION! Le fichier ne semble pas être présent!</span>";
	} else {"reste de la fonction"}
}
Merci!
"Si tu travailles avec un marteau-piqueur pendant un tremblement de terre, désynchronise-toi, sinon tu travailles pour rien."
JC Vandamme.

Mammouth du PHP | 859 Messages

11 avr. 2005, 16:56

Bah oui c'était aussi bête que ça ;)