Enregistrer une image d'un site distant

Soyez le premier à donner votre avis sur cette source.

Snippet vu 11 776 fois - Téléchargée 19 fois

Contenu du snippet

Cette class permet d'enregistrer localement une image d'un site web.
Il faut pour cela connaître l'adresse (URL) exacte de l'image (voir WebPage).

Source / Exemple :


<?php
	class WebImage {
		private $sHost; 
		private $sPath = "/";
		private $sUrl;
		private $sFile;
		private $sReferer;
		private $iCode;                                              // réponse du serveur
		private $aHeader = Array();                                  // entête de la réponse du serveur
		private $sData = "";                                         // donnée de l'image
		private $aLinksToImages = Array();                           // tableau contenant les liens vers les images
		private $bExist = false;                                     // l'image n'existe pas encore
		private $sFolderRoot = "../distant/";                         // dossier contenant les sous dossier
		
		
		//############################## accesseur ##########################################
		function getHost() { return $this->sHost;}
		function getFile() { return $this->sFile;}
		function getArrayOfLinksToImages() { return $this->aLinksToImages;}
		function isSaved() { return $this->bExist;}			
		//############################## constructeur ##########################################
		function __construct ( $sUrlImage, $sUrlPage) 
		{
			$this->sUrl = $sUrlImage;                                // adresse de l'image
			$this->sReferer = $sUrlPage;                             // adresse de la page de l'image
			$aTmp = explode("/", $sUrlImage);
						
			$this->sHost = $aTmp[0];                                 // nom du site distant
			$this->sFile = $aTmp[sizeof($aTmp)-1];                   // nom de l'image
		
			for ($i=1;$i < sizeof($aTmp)-1;$i++) {                   // chemin vers le dossier de l'image
				$iPos_Interrogation = strpos($aTmp[$i], "?");
				if ($iPos_Interrogation === false) {                 // si on trouve pas de "?"
					$this->sPath .=  $aTmp[$i] . "/";                // ajout de tous les dossiers
				}
				else {
					$i = sizeof($aTmp);                              // arrêt de la boucle
				}
			}
			
		}
		
		// renvoi un tableau avec l'entête et l'image
		function Save() {
			if (!file_exists($this->sFolderRoot.$this->sPath.$this->sFile) ) {
				
				$rFp = fsockopen($this->sHost, 80, $errno, $errstr, 30);
				if (!$rFp) {
					return 404; // en cas d'erreur de flux, on renvoi le code 404 "Page Not Found"
				} else {
							
					fputs($rFp, "GET ".$this->sPath.$this->sFile." HTTP/1.1\r\n");
					fputs($rFp, "Host: ".$this->sHost."\r\n");
					fputs($rFp, "Referer: ".$this->sReferer."\r\n");
					fputs($rFp, "User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)\r\n\r\n");
					fputs($rFp, "\r\n");
			
					$bInHeader = true;
				
					while (!feof($rFp)) {
						// récupération des données
						$sLigne = fgets($rFp, 4096); 
						
						if ($bInHeader == true) {
							$this->aHeader[] = $sLigne; 
							// on récupère le code sur la première ligne qui est comme ceci : HTTP/1.1 200 OK
							$aTmpCode = explode(" ", $this->aHeader[0]);
							$this->iCode = $aTmpCode[1];
						}
						else {
							// si l'image est trouvée (HTP/1.1 200 OK)
							if ($this->iCode == 200) {
								$this->sData .= $sLigne;
							}
						}
					
						if ( (strlen($sLigne) < 3)  && ($bInHeader == true) ) {
							$bInHeader = false;
						}
				}
					fclose($rFp);
			
					// enregistrement du fichier
					$sFolder = str_replace("/", "", $this->sPath)."/";
					$filename = $this->sFolderRoot.$sFolder.$this->sFile;      // chemin complet vers l'image
									
					// création du dossier
					if (!file_exists($this->sFolderRoot.$sFolder."/")) {
						mkdir($this->sFolderRoot."/".$sFolder, 0777);
					}
				
					// écriture du fichier
					if (!$handle = fopen($filename, 'wb')) {
						return false;
					}	
					if (fwrite($handle, $this->sData) === FALSE) {
						return false;
					}
					fclose($handle);
				
					// vérification
					if (file_exists($filename)) {
						$this->bExist = true;
					}	
				}
				// return
				return true;
			}
			else {
				$this->bExist = true;
			}
			
		}
		
		// renvoi le chemin vers le fichier downloadé
		function showImage() {
			$sFolder = str_replace("/", "", $this->sPath)."/";
			return $this->sFolderRoot.$sFolder.$this->sFile;
		}
		
		function Resize() {
			
		}
		
		
	}
?>

Conclusion :


ne me tappez pas ... :-D

A voir également

Ajouter un commentaire

Commentaires

waterw72
Messages postés
63
Date d'inscription
jeudi 30 septembre 2004
Statut
Membre
Dernière intervention
18 juillet 2008
-
Bjr,

Je vais couper court à ce débat ...
Je n'ai pas accès aux site cible que l'on va appeler "X" parce que mon réseau/firewall me le refuse.
J'utilise donc mon site (et donc ce script) pour récupérer les images du site "X" que j'enregistre sur mon site.
Ensuite, je peux récupérer ces images de mon site auquel j'ai accès.
grislienski
Messages postés
4
Date d'inscription
samedi 15 mai 2004
Statut
Membre
Dernière intervention
16 octobre 2008
-
Par contre un petit exemple d'appel de la class serait le bienvenue :)
grislienski
Messages postés
4
Date d'inscription
samedi 15 mai 2004
Statut
Membre
Dernière intervention
16 octobre 2008
-
Moi je me dit que ce script ne servira pas forcément à piraté des œuvres, il peut être utile pour d'autres utilisations...
Je vais m'en servir et l'application ne sera en aucun cas illégale.
Ce qui est illégale ce serait effectivement de s'en servir pour pompé des images effectivement protéger, mais pour le reste c'est très utile...
Merci pour ce script
kiki67100
Messages postés
318
Date d'inscription
samedi 6 mai 2006
Statut
Membre
Dernière intervention
10 août 2013
1 -
Oublie on sinon je recrée la requette http pour changer des information comme le user-agent ou mettre un cookie par exemple
kiki67100
Messages postés
318
Date d'inscription
samedi 6 mai 2006
Statut
Membre
Dernière intervention
10 août 2013
1 -
Mon je croyais autre chose quand j'ai vue le titre je pensais a un code qui enregistrer l'image du site une fois intérprété , sinon quand je veut upload un fichier d'un autre site j'utilise copy() ou file_get_contents

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.