[Actualización sab 27 marzo 2010]
* modifiqué la función create_thumbs_all para no generar thumbs de los thumbs si el directorio es el mismo
* modifiqué parcialmente la función file_to_numeric para ignorar los thumbs de archivos numericos que daban TRUE en el preg_match
*agregue el parámetro $sust a la funcion create_thumbs_all para poder o no, trabajar directamente con las originales
Bueno, he estado trabajando mucho con archivos y directorios, más específicamente listando, creando thumbnails y cosas así, decidí crear esta clase bastante simple para poder hacerlo, sé que a muchos les servirá. Se las dejo para que la chequen. Le agregué la clase SimpleImage.php para resize de imagenes así que también tiene eso.
Por el momento no podré explicar como funciona, para aquellos que inician en PHP, por que estoy de salida, pero lo haré pronto. Para los que ya están bastante empezados será sencillo entender como funciona hehe…
/*
fileSys.php (BETA)
by vrS
*/
class fileSys{
function listaDir($path=false,$tipo=false,$clean=false){
if(!$path)
return;
$dir=dir($path);
if(!$tipo)
return;
switch ($tipo)
{
case 'img':
$tipos=array('jpg','gif','jpeg','png');
break;
case 'video':
$tipos=array('flv');
break;
case 'php':
$tipos=array('php');
break;
case 'txt':
$tipos=array('txt');
break;
case 'doc':
$tipos=array('doc');
break;
default:
exit("Tipo de archivo NO VÁLIDO");
break;
}
while ($file = $dir->read())
{
$f=$this->sacaExtension($file,$path,$clean);
if($file!='.' && $file!='..' && in_array($f[0][ext],$tipos))
{
$files[]=$f[0];
}
}
$dir->close();
return $files=(!count($files))?"No hay nada que listar con la extension '$tipo'":$files;
}
function sacaExtension($str,$path=false,$clean=false) {
if($clean)
{
if($path){
$str=$this->cleanName($str,$path);
//$dir=$path."/".$str;
}
else
return "Error sacando extension, verifica el directorio";
}
if(!file_exists($dir=$path."/".$str))
exit("Error sacando extension: No se encontro el archivo $dir");
$file=explode('.',$str);
$ext=strtolower(trim(array_pop($file)));
$name=trim($file[0]);
$f[]=array
(
'ext'=>$ext,
'name'=>$name,
'fullname'=>$str,
'path'=>$path,
'pathname'=>$dir
);
return $f;
}
function cleanName($str,$dir='.'){
if($str=='.'||$str=='..')
return;
$path=$dir."/".$str;
$tofind = "ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ ´`^";
$replac = "AAAAAAaaaaaaOOOOOOooooooEEEEeeeeCcIIIIiiiiUUUUuuuuyNn____";
$nvo=strtolower(strtr($str,$tofind,$replac));
if(!is_dir($path)&&!file_exists($dir."/".$nvo)){
if(@copy($path,$dir."/".$nvo))
unlink($path);
else
exit("Error Limpiando Los nombres de los archivos");
}
return $nvo;
}
function file_to_numeric($ruta=false,$tipo='img',$chkthumbs=false){
if(!$ruta || !is_dir($ruta))
return "Parametros insuficientes";
$files=$this->listaDir($ruta,$tipo);
$c=0;
foreach ($files as $file)
{
if($chkthumbs)
{
if(!preg_match('/^[0-9]+$/',$file[name])&&!preg_match('/^.+t$/',$file[name]))
{
while(file_exists($ruta."/".++$c.".".$file[ext]));
$nuevoname=$ruta."/".$c.".".$file[ext];
if(!@rename($file[pathname],$nuevoname));
echo "Error renombrando $file[pathname]<br/>";
}
}else
{
if(!preg_match('/^[0-9]+$/',$file[name]))
{
while(file_exists($ruta."/".++$c.".".$file[ext]));
$nuevoname=$ruta."/".$c.".".$file[ext];
if(!@rename($file[pathname],$nuevoname));
echo "Error renombrando $file[pathname]<br/>";
}
}
}
}
function create_thumbs_all($path='.',$dest='thumbs',$size=50,$sust=false){
if(!file_exists($path."/".$dest))
if(!@mkdir($path."/".$dest,0775))
exit("Hubo un error creando thumbs en $path verifica los permisos del directorio");
$files=$this->listaDir($path,'img');
foreach ($files as $file){
if(!file_exists($new=$path."/".$dest."/".$file[name]."t.".$file[ext])&&$dest!='')
{
$this->load($file[pathname]);
$this->resizeToWidth($size);
$this->save($new);
}elseif($dest==''&&!preg_match('/^.+t$/',$file[name]))
{
$this->load($file[pathname]);
$this->resizeToWidth($size);
if($sust)
$this->output($file[pathname]);
else
$this->save($new);
}
}
}
/* Comienza porción de código tomado de SimpleImage
* File: SimpleImage.php
* Author: Simon Jarvis
* Copyright: 2006 Simon Jarvis
* Date: 08/11/06
* Link: http://www.white-hat-web-design.co.uk/articles/php-image-resizing.php
*/
var $image;
var $image_type;
function load($filename) {
$image_info = getimagesize($filename);
$this->image_type = $image_info[2];
if( $this->image_type == IMAGETYPE_JPEG ) {
$this->image = imagecreatefromjpeg($filename);
} elseif( $this->image_type == IMAGETYPE_GIF ) {
$this->image = imagecreatefromgif($filename);
} elseif( $this->image_type == IMAGETYPE_PNG ) {
$this->image = imagecreatefrompng($filename);
}
}
function save($filename, $image_type=IMAGETYPE_JPEG, $compression=75, $permissions=null) {
if( $image_type == IMAGETYPE_JPEG ) {
imagejpeg($this->image,$filename,$compression);
} elseif( $image_type == IMAGETYPE_GIF ) {
imagegif($this->image,$filename);
} elseif( $image_type == IMAGETYPE_PNG ) {
imagepng($this->image,$filename);
}
if( $permissions != null) {
chmod($filename,$permissions);
}
}
function output($image_type=IMAGETYPE_JPEG) {
if( $image_type == IMAGETYPE_JPEG ) {
imagejpeg($this->image);
} elseif( $image_type == IMAGETYPE_GIF ) {
imagegif($this->image);
} elseif( $image_type == IMAGETYPE_PNG ) {
imagepng($this->image);
}
}
function getWidth() {
return imagesx($this->image);
}
function getHeight() {
return imagesy($this->image);
}
function resizeToHeight($height) {
$ratio = $height / $this->getHeight();
$width = $this->getWidth() * $ratio;
$this->resize($width,$height);
}
function resizeToWidth($width) {
$ratio = $width / $this->getWidth();
$height = $this->getheight() * $ratio;
$this->resize($width,$height);
}
function scale($scale) {
$width = $this->getWidth() * $scale/100;
$height = $this->getheight() * $scale/100;
$this->resize($width,$height);
}
function resize($width,$height) {
$new_image = imagecreatetruecolor($width, $height);
imagecopyresampled($new_image, $this->image, 0, 0, 0, 0, $width, $height, $this->getWidth(), $this->getHeight());
$this->image = $new_image;
}
}
Si lo mejoran, agradecería que lo rolaran x)