/branches/v2.1-emondoir/jrest/services/CelImageFormat.php |
---|
1,22 → 1,58 |
<?php |
class CelImageFormat extends Cel { |
class CelImageFormat { |
private $config; |
private $formats = array('CRX2S','CRXS','CXS','CS','CRS','XS','S','M','L','XL','X2L','X3L','O'); |
// Pas besoin d'étendre Cel ici, surtout que le constructeur |
// de la classe Cel instancie toujours une connexion à la bdd |
// dont on a pas besoin ici. Ceci évite de planter le service |
// quand la bdd est surchargée. |
public function __construct($config) { |
$this->config = $config; |
} |
/** |
* Méthode appelée avec une requête de type GET. |
*/ |
public function getElement($params) { |
// suppression des 0 non significatifs à gauche |
$id = ltrim($params[0],'0'); |
$format = isset($_GET['format']) ? $_GET['format'] : 'M'; |
$gestion_formats_images = new ImageRecreation($this->config); |
$image_binaire = $gestion_formats_images->creerOuRenvoyerImage($params[0], $format); |
if($this->verifierParametres($id, $format)) { |
$gestion_formats_images = new ImageRecreation($this->config); |
$image_binaire = $gestion_formats_images->creerOuRenvoyerImage($params[0], $format); |
if($image_binaire) { |
header('Content-Type: image/jpeg'); |
echo $image_binaire; |
exit; |
} else { |
header("HTTP/1.0 404 Not Found"); |
echo 'Aucune image ne correspond à cet identifiant'; |
} |
} |
} |
private function verifierParametres($id, $format) { |
$ok = true; |
$message = ''; |
if(!is_numeric($id)) { |
$message .= "L'identifiant de format doit être un entier. "; |
$ok = false; |
} |
if($image_binaire) { |
header('Content-Type: image/jpeg'); |
echo $image_binaire; |
exit; |
} else { |
header("HTTP/1.0 404 Not Found"); |
if(!in_array($format, $this->formats)) { |
$message .= "Le format d'image est inconnu, les formats acceptés sont ".implode(',', $this->formats).". "; |
$ok = false; |
} |
if(!empty($message)) { |
header("HTTP/1.0 400 Bad Request"); |
echo $message; |
} |
return $ok; |
} |
} |
/branches/v2.1-emondoir/jrest/lib/ImageRecreation.php |
---|
94,17 → 94,27 |
$image = false; |
if(!file_exists($chemin_image)) { |
$infos_image_originale = $this->obtenirImageEtInfosPourChemin($this->obtenirCheminImageOriginale($id)); |
$chemin_image_originale = $this->obtenirCheminImageOriginale($id); |
$infos_image_originale = $this->obtenirImageEtInfosPourChemin($chemin_image_originale); |
if($infos_image_originale) { |
$debut = microtime(); |
$this->creerEtStockerMiniatureFichierImageSelonFormat($id, $infos_image_originale, $format); |
// le verrou est là dans le (rare) cas où l'image est déjà en train |
// d'être générée par le script de création des miniatures ou bien |
// un autre instance de cette classe appelée par le web service |
$fp = fopen($chemin_image_originale, "r"); |
// si le fichier est verrouillé, flock attendra qu'il se libère |
$verrou = flock($fp, LOCK_EX); |
if(!file_exists($chemin_image)) { |
// si le fichier a été locké alors l'image était en train d'être générée |
// et donc il n'est pas nécéssaire de la créer (d'où le 2eme test sur file exists) |
$this->creerEtStockerMiniatureFichierImageSelonFormat($id, $infos_image_originale, $format); |
} |
$verrou = flock($fp, LOCK_UN); |
fclose($fp); |
$image = file_get_contents($chemin_image); |
} |
} else { |
$image = file_get_contents($chemin_image); |
} |
return $image; |
} |
/branches/v2.1-emondoir/scripts/modules/generationimages/ImageRecreation.php |
---|
1,4 → 1,7 |
<?php |
// Cette classe est un quasi copier-coller de la classe éponyme dans |
// le dossier lib de jrest mais pas de mécanisme commun pour les classes |
// TODO: utiliser la même classe pour jrest ainsi que les scripts |
Class ImageRecreation { |
private $droits = 0755; |
47,12 → 50,16 |
if (file_exists($chemin_fichier)) { |
$infos_image_originale = $this->obtenirImageEtInfosPourChemin($chemin_fichier); |
// obtention d'un verrou sur le fichier original pour empecher d'autres scripts |
// d'effectuer la création des miniatures |
$fp = fopen($chemin_fichier, "r"); |
$verrou = flock($fp, LOCK_EX); |
// creation de miniatures pour chacuns des formats définis |
foreach ($this->formats as $format) { |
$this->creerEtStockerMiniatureFichierImageSelonFormat($id, $infos_image_originale, $format); |
}; |
$verrou = flock($fp, LOCK_UN); |
fclose($fp); |
} |
} |
/branches/v2.1-emondoir/scripts |
---|
Property changes: |
Modified: svn:mergeinfo |
Merged /trunk/scripts:r2133-2134 |
/branches/v2.1-emondoir |
---|
Property changes: |
Modified: svn:mergeinfo |
Merged /trunk:r2133-2134 |