Enregistrement automatique sur un serveur d'une image en ligne

Résolu
julien2424 Messages postés 76 Date d'inscription mardi 8 août 2006 Statut Membre Dernière intervention 24 avril 2012 - 19 mai 2011 à 12:01
cod57 Messages postés 1653 Date d'inscription dimanche 7 septembre 2008 Statut Membre Dernière intervention 11 septembre 2013 - 19 mai 2011 à 14:31
Bonjour à tous

Je suis débutant en php, mais vraiment, vraiment :D
Ce que je souhaiterai faire, c'est récupérer automatiquement (sans bouton parcourir) une image stockée sur un site distant(avec son URL) et pouvoir l'enregistrer sur mon serveur dans un dossier spécifique.
Après coup, quand l'image est actualisée sur l'url du site distant, que celle enregistrée sur mon serveur puisse être écrite par dessus pour la tenir à jour.

C'est possible?
Car ça fait des jours et des jours que je cherche, et je trouve que des lignes de codes avec de bouton parcourir.

Merci beaucoup de votre aide

Jules

5 réponses

cod57 Messages postés 1653 Date d'inscription dimanche 7 septembre 2008 Statut Membre Dernière intervention 11 septembre 2013 19
19 mai 2011 à 14:31
bonjour

les propositions de syndrael sont je crois les plus simples et evidentes
mais si tu veux faire un script j'ai bricolé ça vite fait pour une image
pour 25 images faudra faire une boucle ... pas le temps

<?php

 if( !ini_get('safe_mode') ){ 
            set_time_limit(500); 
        }
/*
http://www.white-hat-web-design.co.uk/articles/php-image-resizing.php
http://www.codeartistique.com/2009/01/08/connaitre-le-poids-dun-fichier-distant-utile-en-php-4x.html
*/

/*tu peux enlever cette fonction c'est juste pour le poids ...*/
function Remote_Filesize($url) {
        $sch = parse_url($url, PHP_URL_SCHEME);
        if (($sch != "http") && ($sch != "https") && ($sch != "ftp") && ($sch
!= "ftps")) {
            return false;
        }
        if (($sch "http") || ($sch "https")) {
            $headers = @get_headers($url, 1);
            if (!is_array($headers)){$headers=array();}
            if ((!array_key_exists("Content-Length", $headers))) { return
false; }
            return $headers["Content-Length"];
        }
        if (($sch "ftp") || ($sch "ftps")) {
            $server = parse_url($url, PHP_URL_HOST);
            $port = parse_url($url, PHP_URL_PORT);
            $path = parse_url($url, PHP_URL_PATH);
            $user = parse_url($url, PHP_URL_USER);
            $pass = parse_url($url, PHP_URL_PASS);
            if ((!$server) || (!$path)) { return false; }
            if (!$port) { $port = 21; }
            if (!$user) { $user = "anonymous"; }
            if (!$pass) { $pass = "phpos@"; }
            switch ($sch) {
                case "ftp":
                    $ftpid = ftp_connect($server, $port);
                    break;
                case "ftps":
                    $ftpid = ftp_ssl_connect($server, $port);
                    break;
            }
            if (!$ftpid) { return false; }
            $login = ftp_login($ftpid, $user, $pass);
            if (!$login) { return false; }
            $ftpsize = ftp_size($ftpid, $path);
            ftp_close($ftpid);
            if ($ftpsize == -1) { return false; }
            return $ftpsize;
        }
    }
 
/*
* File: SimpleImage.php
* Author: Simon Jarvis
* Copyright: 2006 Simon Jarvis
* Date: 08/11/06
* Link: http://www.white-hat-web-design.co.uk/articles/php-image-resizing.php
* 
* This program is free software; you can redistribute it and/or 
* modify it under the terms of the GNU General Public License 
* as published by the Free Software Foundation; either version 2 
* of the License, or (at your option) any later version.
* 
* This program is distributed in the hope that it will be useful, 
* but WITHOUT ANY WARRANTY; without even the implied warranty of 
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 
* GNU General Public License for more details: 
* http://www.gnu.org/licenses/gpl.html
*
*/
 
class SimpleImage {
   
   var $image;
   var $image_type;
 
   function load($filename) {
      $image_info = getimagesize($filename);
      $this->image_type = $image_info[2];
      if( $this->image_type == IMAGETYPE_JPEG ) {
         $this->image = imagecreatefromjpeg($filename);
      } elseif( $this->image_type == IMAGETYPE_GIF ) {
         $this->image = imagecreatefromgif($filename);
      } elseif( $this->image_type == IMAGETYPE_PNG ) {
         $this->image = imagecreatefrompng($filename);
      }
   }
   function save($filename, $image_type=IMAGETYPE_JPEG, $compression=75, $permissions=null) {
      if( $image_type == IMAGETYPE_JPEG ) {
         imagejpeg($this->image,$filename,$compression);
      } elseif( $image_type == IMAGETYPE_GIF ) {
         imagegif($this->image,$filename);         
      } elseif( $image_type == IMAGETYPE_PNG ) {
         imagepng($this->image,$filename);
      }   
      if( $permissions != null) {
         chmod($filename,$permissions);
      }
   }
   function output($image_type=IMAGETYPE_JPEG) {
      if( $image_type == IMAGETYPE_JPEG ) {
         imagejpeg($this->image);
      } elseif( $image_type == IMAGETYPE_GIF ) {
         imagegif($this->image);         
      } elseif( $image_type == IMAGETYPE_PNG ) {
         imagepng($this->image);
      }   
   }
   function getWidth() {
      return imagesx($this->image);
   }
   function getHeight() {
      return imagesy($this->image);
   }
   function resizeToHeight($height) {
      $ratio = $height / $this->getHeight();
      $width = $this->getWidth() * $ratio;
      $this->resize($width,$height);
   }
   function resizeToWidth($width) {
      $ratio = $width / $this->getWidth();
      $height = $this->getheight() * $ratio;
      $this->resize($width,$height);
   }
   function scale($scale) {
      $width = $this->getWidth() * $scale/100;
      $height = $this->getheight() * $scale/100; 
      $this->resize($width,$height);
   }
   function resize($width,$height) {
      $new_image = imagecreatetruecolor($width, $height);
      imagecopyresampled($new_image, $this->image, 0, 0, 0, 0, $width, $height, $this->getWidth(), $this->getHeight());
      $this->image = $new_image;   
   }      
}
/*ton rep de stockage*/
$rep='mini';
if(file_exists($rep)){
}else{
mkdir($rep,chmod($rep, 755)); /*yo unix seulement*/
}

/*1 à 25 faire une boucle */
$f='http://upload.wikimedia.org/wikipedia/commons/archive/3/3c/20090824120448!Nicolas_Sarkozy_(2008).jpg';
$i=explode('/',$f);
$x=(count($i)-1);
echo '';
print_r($i);
echo '

';
echo $img=$i[$x];

$n=$rep.'/'.$img;
if(file_exists($rep.'/'.$img)){
//on fait rien il existe
}else{
//$file = file_get_contents ($f); 
/*
echo '';
$r2=getimagesize($f);
$r3=Remote_Filesize($f);
print_r($r2);
print_r($r3);
echo ' OCTETS ';
echo '

';
*/ 

/*on redimensionne et enregistre*/ 
   $image = new SimpleImage();
   $image->load($f);
   $image->resizeToHeight(480);
   $image->save($n);    
   
   echo 'reussi';
}
?>



Bonne programmation !
3
syndrael Messages postés 2378 Date d'inscription lundi 4 février 2002 Statut Membre Dernière intervention 29 décembre 2012 20
19 mai 2011 à 12:12
Et dans ton code HTML tu ne peux pas pointer sur l'URL de cette image distante ? C'est peut-être la façon la plus simple. Quel est l'avantage de l'avoir sur ton serveur ?
S.
0
julien2424 Messages postés 76 Date d'inscription mardi 8 août 2006 Statut Membre Dernière intervention 24 avril 2012
19 mai 2011 à 12:21
Actuellement, c'est ce que je fais, mais le problème c'est qu'il y a 15 images, assez lourdes qui par un script, s'anime les une à la suite des autres, et change toute les 1 sec.
Certaines sont tellement lourdes qu'elle ne se charge pas dans le temps imparti et l'animation passe direct à la suivante.
De plus, les images sont rechargée par le navigateur à chaque fois, même la boucle achevée.

Je pense qu'en les enregistrant sur mon serveur, il n'y aurais plus d'images "sautés" puisqu'elle n'aurais pas a être téléchargée à chaque fois?


Jules
0
syndrael Messages postés 2378 Date d'inscription lundi 4 février 2002 Statut Membre Dernière intervention 29 décembre 2012 20
19 mai 2011 à 13:07
Ou alors tu utilises Javascript.
1. tu lances une attente coté affichage graphique
2. pendant ce temps tu mets en cache tes images ?
3. tu affiches les images en cache de ton navigateur
S.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
julien2424 Messages postés 76 Date d'inscription mardi 8 août 2006 Statut Membre Dernière intervention 24 avril 2012
19 mai 2011 à 13:13
Ah pourquoi pas. ;)

Bon je suis pas plus futé en javascript qu'en php

Mon code actuel est:
<script>
var pictureArchive= ['http://www.siteweb.fr','http://www.siteweb.fr'];
 
window.onload=function() {
var o=document.createElement('img');
o.setAttribute('id', 'image');
o.setAttribute('src', pictureArchive[0]);
o.setAttribute('alt', '');
document.body.appendChild(o);
rotate(pictureArchive.length);
}
 
function rotate(idx) {
if(idx>=pictureArchive.length) {
idx=0;
}
document.getElementById('image').src=pictureArchive[idx++];
timerID=setTimeout('rotate('+idx+')', 1000);
}
</script>
0
Rejoignez-nous