/** * Para insertar un nuevo registro, debo pasar la ruta de * una imagen válida (puede ser de un archivo local o uno remoto con http://...) */ public static function INSERT($image_path) { // Compruebo si el archivo es en realidad una imagen: //$finfo = finfo_open(FILEINFO_MIME_TYPE); //$mime = finfo_file($finfo, $image_path); $temp_hash = md5(microtime()); Rack::Write('temp', $temp_hash, $image_path); $temp_path = Rack::Path('temp', $temp_hash); $is = getimagesize($temp_path); $mime = $is['mime']; switch ($mime) { case 'image/jpeg': $gd = @imagecreatefromjpeg($temp_path); break; case 'image/png': $gd = @imagecreatefrompng($temp_path); break; case 'image/gif': $gd = @imagecreatefromgif($temp_path); break; case 'image/bmp': $gd = @imagecreatefrombmp($temp_path); break; default: return null; } if (is_resource($gd)) { $width = imagesx($gd); $height = imagesy($gd); $hash = md5_file($temp_path); $list = Image::SELECT("Hash='" . Database::escape($hash) . "'"); if (count($list)) { // La imagen ya existe :S $image = $list[0]; $image->_setCounter($image->getCounter() + 1); } else { // Creo un nuevo registro de imagen :) $image = parent::INSERT(); $image->_setWidth($width); $image->_setHeight($height); $image->_setMime($mime); $image->_setHash($hash); $image->_setSize(@filesize($temp_path)); $image->_setCounter(1); // Copiar imagen a la carpeta de imágenes con el id de $image->getId(); (o con el hash) Rack::Write('img', md5($image->ID()), $temp_path); } Rack::Remove('temp', $temp_hash); return $image; } else { // Error al abrir la imagen Rack::Remove('temp', $temp_hash); return null; } }
<?php $id = Router::$parameters['{id}']; $image = Image::ROW($id); if (null == $image) { exit; } $parts = Router::$parts; if (0 == count($parts)) { $path = Rack::Path('img', md5($image->getId())); } elseif (1 == count($parts)) { $transformation = $parts[0]; $hash = md5(Router::$url); $path = Rack::Path('img.cache', $hash); if (!file_exists($path)) { Rack::Make('img.cache', $hash); $prim = Prim::transform($image); $prim->setRules($transformation); $prim->saveTo($path); } } else { exit; } header("Expires: " . date("r", time() + 9999999)); header("Content-type: " . $image->getMime()); header("Content-Length: " . filesize($path)); readfile($path);
<?php $url =& ControllerPhp::$url; if (count($url) == 1) { $file = File::ROW($url[0]); array_shift($url); if ($file != null) { $path = Rack::Path('file', md5($file->ID())); if (file_exists($path)) { header("Content-type: " . $file->getMime()); header('Content-Disposition: attachment; filename="' . $file->getName() . '"'); header("Content-Length: " . filesize($path)); readfile($path); } } }
private function __construct(&$image) { $this->_image =& $image; $this->_path = Rack::Path('img', md5($image->ID())); }