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
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.