Enregistrement automatique sur un serveur d'une image en ligne [Résolu]

julien2424 76 Messages postés mardi 8 août 2006Date d'inscription 24 avril 2012 Dernière intervention - 19 mai 2011 à 12:01 - Dernière réponse : cod57 1661 Messages postés dimanche 7 septembre 2008Date d'inscription 11 septembre 2013 Dernière intervention
- 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
Afficher la suite 

Votre réponse

5 réponses

Meilleure réponse
cod57 1661 Messages postés dimanche 7 septembre 2008Date d'inscription 11 septembre 2013 Dernière intervention - 19 mai 2011 à 14:31
3
Merci
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 !

Merci cod57 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 70 internautes ce mois-ci

Commenter la réponse de cod57
syndrael 2382 Messages postés lundi 4 février 2002Date d'inscription 29 décembre 2012 Dernière intervention - 19 mai 2011 à 12:12
0
Merci
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.
Commenter la réponse de syndrael
julien2424 76 Messages postés mardi 8 août 2006Date d'inscription 24 avril 2012 Dernière intervention - 19 mai 2011 à 12:21
0
Merci
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
Commenter la réponse de julien2424
syndrael 2382 Messages postés lundi 4 février 2002Date d'inscription 29 décembre 2012 Dernière intervention - 19 mai 2011 à 13:07
0
Merci
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.
Commenter la réponse de syndrael
julien2424 76 Messages postés mardi 8 août 2006Date d'inscription 24 avril 2012 Dernière intervention - 19 mai 2011 à 13:13
0
Merci
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>
Commenter la réponse de julien2424

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.