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

cs_zzzzzz Messages postés 408 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 18 décembre 2012 - 4 déc. 2004 à 20:56
cs_alfredben Messages postés 8 Date d'inscription vendredi 12 septembre 2003 Statut Membre Dernière intervention 22 février 2006 - 19 août 2005 à 19:13
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

cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
5 déc. 2004 à 10:40
Salut ;-)

utilises la fonction filesize :

Fonction filesize

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

a ++

0
quiaimeflash Messages postés 270 Date d'inscription samedi 29 novembre 2003 Statut Membre Dernière intervention 11 juillet 2007
5 déc. 2004 à 12:28
Salut !
Tiens, peut etre la solution ?
http://www.nexen.net/scripts/details.php?scripts=595
0
cs_zzzzzz Messages postés 408 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 18 décembre 2012
5 déc. 2004 à 14:14
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
0
cs_alfredben Messages postés 8 Date d'inscription vendredi 12 septembre 2003 Statut Membre Dernière intervention 22 février 2006
19 août 2005 à 19:13
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
0
Rejoignez-nous