Page 1 sur 1
taille fichier sur serveur web distant
Posté : 11 avr. 2005, 13:50
par manuscle
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
Manuscle
Posté : 11 avr. 2005, 14:19
par Gentoo Warrior
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
Posté : 11 avr. 2005, 15:12
par manuscle
Merci beaucoup je vais le tester!
Posté : 11 avr. 2005, 15:40
par manuscle
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?
Posté : 11 avr. 2005, 15:44
par slipndi
ben peu être la méthode de calcul? ou les arrondit? je pense...
Posté : 11 avr. 2005, 15:45
par flitox
C'est normal c'est en octet :
1ko = 1024 octets
donc
51,2ko = 52428,8 octets (soit 52ko en arrondi)

Posté : 11 avr. 2005, 15:45
par manuscle
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;
Posté : 11 avr. 2005, 15:47
par manuscle
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!
Posté : 11 avr. 2005, 15:48
par flitox
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)

Posté : 11 avr. 2005, 15:56
par manuscle
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à!

Posté : 11 avr. 2005, 16:25
par manuscle
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?
Posté : 11 avr. 2005, 16:28
par flitox
$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

Posté : 11 avr. 2005, 16:46
par manuscle
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!
Posté : 11 avr. 2005, 16:56
par flitox
Bah oui c'était aussi bête que ça
