Enregistrer une image d'un site distant

Soyez le premier à donner votre avis sur cette source.

Snippet vu 11 728 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

cs_depression
Messages postés
100
Date d'inscription
mardi 7 novembre 2000
Statut
Membre
Dernière intervention
13 juillet 2009
-
C'est illégal!
coucou747
Messages postés
12336
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
26 -
qu'y avait-il d'illegal ?
cs_yoman64
Messages postés
593
Date d'inscription
samedi 19 janvier 2002
Statut
Membre
Dernière intervention
4 décembre 2008
-
J'aimerais bien savoir aussi ce qu'il y a d'illégal à enregistrer une image en php ? lol
malalam
Messages postés
10918
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
17 -
Hello,

heu, moi aussi...? D'autant plus que la source n'a pas été supprimée par un admin apparemment...
codefalse
Messages postés
1127
Date d'inscription
mardi 8 janvier 2002
Statut
Modérateur
Dernière intervention
21 avril 2009
1 -
vraiment je suis aussi curieux !! :p

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.