Obtenir taille fichier distant sans télécharger le fichier

Signaler
Messages postés
408
Date d'inscription
lundi 16 décembre 2002
Statut
Membre
Dernière intervention
18 décembre 2012
-
Messages postés
8
Date d'inscription
vendredi 12 septembre 2003
Statut
Membre
Dernière intervention
22 février 2006
-
salut à tous :)

En fait j'ai un code pour obtenir la taille d'un fichier distant. cad:

$buffer = '';
if ($fd = fopen ($url, "r")) {
while (!feof($fd)) {
$buffer .= fgets($fd, 4096);
}
fclose ($fd);
}
$size = strlen($buffer);

Ca marche impec sauf que des qu'il s'agit de fichier de 50 mo. :)
Il me semble donc apèrs recherche que en fait ce code consiste à telecharger le fichier coté serveur pour analyser la taille... CE QUI EST HORRIBLE! Surtout quand notre hebergeur pro limite la bande passante. Donc télécharger a chaque fois un fichier de 50 mo juste pour en connaitre la taille.. C ... gloups... indescriptible. llol

J'ai trouver ce code mais je n'arriver pas a le faire fonctioné:

function GetDistantFileSize($host , $port , $path){
$size=-1;
if($fp=fsockopen($host, $port)){
fputs("HEAD $path HTTP/1.0\r\n\r\n");
while(!feof($fp)){
$buffer=fgets($fp, 1024);
$split=explode(' ', $buffer);
if($split[0]=="Content-Length:"){
$size=(int)$split[1];
break;
}
}
fclose($fp);
}
return($size);
}
$host = 'http://unsite.free.fr';
$port = 80;
$path = '/vid/Diablus.com_36.avi';
echo GetDistantFileSize($host , $port , $path);

Mais cela m'echo -1 ? :\ J'ai surrement du me gouré dans les paramaetres mais je vois pas ou... En tout cas ce code si il fonctionnerai me permettrai d'évité la méthode lourde pour obtenir la taille d'un fichier distant qui usurpe la bande passante pour rien :\.

Merci d'avanceš! :)

----------------------------------------------------

Site en developpement : www.diablus.com

4 réponses

Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
8
Salut ;-)

utilises la fonction filesize :

Fonction filesize

cette fonction ne fonctionne qu'avec php5 pour les fichiers distants.

a ++

Messages postés
270
Date d'inscription
samedi 29 novembre 2003
Statut
Membre
Dernière intervention
11 juillet 2007

Salut !
Tiens, peut etre la solution ?
http://www.nexen.net/scripts/details.php?scripts=595
Messages postés
408
Date d'inscription
lundi 16 décembre 2002
Statut
Membre
Dernière intervention
18 décembre 2012

Merci à vous ;-)

Malheuresement Anthomicro mon hebergeur n'est pas encore passé à php 5 :-\ Pour quiaimeflash c biewn ca! Mais a marche po :\ lol

J'ai essayé.

function remote_file_size($url){

$firstCut = substr($url, 7, strlen($url));
$firstSlashPOS = strpos($firstCut, "/");
$host = substr($firstCut, 0, $firstSlashPOS);
$filename = substr($firstCut, $firstSlashPOS, strlen($firstCut));

$fp = fsockopen ($host, 80);
fputs ($fp, "GET $filename HTTP/1.1\r\nHost:
jboy.dyn.dhs.org\r\n\r\n");

for($i=0; $i < 10; $i++) {
$buffer .= fgets ($fp, 2000);
}
if(strstr($buffer, "Content-Type")) {
fputs ($fp, "\r\n\r\n\r\n");
fclose ($fp);
}
$contentLengthPOS = strpos($buffer, "Content-Length");
$buffer = substr($buffer, $contentLengthPOS+16);
$newLinePOS = strpos($buffer, "\n");
$buffer = substr($buffer, 0, $newLinePOS);

$answer = sprintf("%".strpos($buffer, ".").".1f", $buffer/1024);

if($answer > 1024) {
$answer = sprintf("%".strpos($answer, ".").".1fmb",
$answer/1024);
} else {
$answer .= "kb";
}
$formatAnswer = str_replace(' ','',$answer);

return $formatAnswer;

}
echo remote_file_size("http://teamfod.free.fr/vid/Diablus.com_36.avi");

Mais rien à faire :\ il m'affiche 0.0kb

----------------------------------------------------

Site en developpement : www.diablus.com
Messages postés
8
Date d'inscription
vendredi 12 septembre 2003
Statut
Membre
Dernière intervention
22 février 2006

Salut
bon ca resort un vieux post mais bon
J'ai trouver comment faire marcher le script et je l'ai un peu arrangé

function filesize_url($url,$port){
$size=-1;
$site=substr($url,7,strpos(substr($url,7),'/'));
$errstr='';
if($fp=@fsockopen($site, $port,$errno,$errstr)){
fputs($fp,"HEAD $url HTTP/1.0\r\n\r\n",strlen("HEAD $url HTTP/1.0\r\n\r\n"));
while(!feof($fp)){
$buffer=fgets($fp, 1024);
$split=explode(' ', $buffer);
if($split[0]=="Content-Length:"){
$size=(int)$split[1];
break;
}
}
fclose($fp);
}
if($errstr!='' || $size==-1) return false;
return $size;
}

ca s'utilise par exemple print ( filesize_url("http://www.monsite.com/toto.zip",80))
voila. ca marche impec