Soyez le premier à donner votre avis sur cette source.
Snippet vu 11 931 fois - Téléchargée 19 fois
<?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() { } } ?>
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.
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
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.