- <?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() {
-
- }
-
-
- }
- ?>
<?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() {
}
}
?>