recuperer la taille d'un fichier distant

recuperer la taille d'un fichier distant - PHP - Programmation

Marsh Posté le 14-01-2010 à 09:34:41    

Bonjour,
 
j'explique le contexte :  
 
je dois recuperé un repertoire distant contenant des images qui peut-être conséquent. Pour éviter d'encombrer la connexion et le serveur, je veux faire une comparaison entre les images que j'ai déjà  en local et les images distantes pour ne télécharger que les images qui ont changées ou qui ont été ajoutées.
 
Je suis partit sur l'idée de comparer la taille des fichiers, mais c'est peut-être plus simple de comparer la date de création?
 
y a-t-il moyen de récupérer ces données sans télécharger integralement le fichier? car sinon autant faire directement de l'annule et remplace...
 
j'ai trouvé ça en recherchant mais ça ne me convient pas puisque le féchier est téléchargé:
 
<?php
    $server = "#nom du serveur";
    $file = "/7/1394/3235/v007/5647897.jpg";
   
    $fs = @fsockopen($server, 80, $errno, $errstr, 15);
    @fputs($fs, "HEAD $file HTTP/1.0\r\n" );
    @fputs($fs, "Connection: close\r\n\r\n" );
   
    while ($line = @fgets($fs,1024))
   {
   if (substr($line, 0, 16) == "Content-Length: " )
   {
    $filesize = trim(substr($line, 16));
    @fclose($fs);
    break;
           }
  }
   
  echo "The file is $filesize bytes long";
 
?>
 
thread ici :
http://forum.hardware.fr/hfr/Progr [...] 6079_1.htm

Reply

Marsh Posté le 14-01-2010 à 09:34:41   

Reply

Marsh Posté le 14-01-2010 à 09:40:53    

tu as un accès ftp à ce serveur ?  
 
et sinon, plutôt que de réinventer la roue, tu as regardé du côté de rsync ?


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

Reply

Marsh Posté le 14-01-2010 à 09:44:46    

non et non :/

 

je regarde pour rsync (je ne connais pas)

 

edit: rsync ne convient pas car ce n'est pas vraiment un repertoire à synchroniser (j'ai éditer mon 1er post), je recupere des données d'information touristique élément par élément, je passe sur les détails, mais dans chaque élément il y'a l'url d'une image stockée sur un serveur que je dois récupérer (l'image pas l'url). Les traitements étant de plus en plus consequent, je veux limiter les transfert et ne télécharger l'image que si elle n'est pas sur le serveur local OU si la taille de l'image distante par rapport à l'image locale est differente.


Message édité par golumest le 14-01-2010 à 10:02:50
Reply

Marsh Posté le 14-01-2010 à 09:54:55    

c'est un outil de synchorinsation de fichier/dossier

 

mais c'est vrai que sans acces ftp/ssh , ça va etre compliqué

 

tu as aussi httracks qui est un outil de téléchargement de site distant


Message édité par flo850 le 14-01-2010 à 09:55:05

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

Reply

Marsh Posté le 14-01-2010 à 10:20:06    

httracks, je connais, mais il n'est pas adapté pour ce que je veux faire.
 
Dans le cas qui m'interesse, je n'ai ni d'acces ssh ni ftp, je n'ai a disposition que du hhtp sans aucun droit sur le serveur distant!

Reply

Marsh Posté le 14-01-2010 à 11:14:58    

Mais c'est quel protocole que tu utilises ? du http ?

Reply

Marsh Posté le 14-01-2010 à 12:27:07    

oui http

Reply

Marsh Posté le 14-01-2010 à 12:49:48    

bon j'ai trouvé une solution, mais je ne comprends pas comment ça peut marcher ...
 
Le $fp est à voir comme un buffer d'entrée sortie? on écrit ds $fp et en retour,  on recupere le head du fichier?
En fait on ne fait que écrire dans $fp, comment peut on avoir ce que l'on a demandé surtout que l'ont mets 3 instructions à la suite?
 
 
   $parsed = parse_url($url);
   $host = $parsed["host"];
   $fp = @fsockopen($host, 80, $errno, $errstr, 20);
   if(!$fp) return false;
   else {
       @fputs($fp, "HEAD $url HTTP/1.1\r\n" );
       @fputs($fp, "HOST: $host\r\n" );
       @fputs($fp, "Connection: close\r\n\r\n" );
       $headers = "";
       while(!@feof($fp))$headers .= @fgets ($fp, 128);
   }
 

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed