[APORTE] Eliminar caracteres especiales, Subir varias img, Redimensionar img Hace unos dias estuve haciendo unas funciones para para subir imagenes y redimensionarlas mediante php con la libreria GD.
Son 3 funciones que aunque las utilizo de forma conjunta bien se podrian adaptar par utilizarlas por separado.
Las dejo aquí por si a alguien le viene bien y si tienen mejoras o dudas, encantado de leerlas.
La primera esta extraida de aquí
eliminar_simbolos($string) Código PHP: <?php /** * Extraido de http://ecapy.com/reemplazar-la-n-acentos-espacios-y-caracteres-especiales-con-php-actualizada/ * Reemplaza todos los acentos por sus equivalentes sin ellos * * @param $string * string la cadena a sanear * * @return $string * string saneada */ function eliminar_simbolos($string){ $string = trim($string); $string = str_replace( array('á', 'à', 'ä', 'â', 'ª', 'Á', 'À', 'Â', 'Ä'), array('a', 'a', 'a', 'a', 'a', 'A', 'A', 'A', 'A'), $string ); $string = str_replace( array('é', 'è', 'ë', 'ê', 'É', 'È', 'Ê', 'Ë'), array('e', 'e', 'e', 'e', 'E', 'E', 'E', 'E'), $string ); $string = str_replace( array('í', 'ì', 'ï', 'î', 'Í', 'Ì', 'Ï', 'Î'), array('i', 'i', 'i', 'i', 'I', 'I', 'I', 'I'), $string ); $string = str_replace( array('ó', 'ò', 'ö', 'ô', 'Ó', 'Ò', 'Ö', 'Ô'), array('o', 'o', 'o', 'o', 'O', 'O', 'O', 'O'), $string ); $string = str_replace( array('ú', 'ù', 'ü', 'û', 'Ú', 'Ù', 'Û', 'Ü'), array('u', 'u', 'u', 'u', 'U', 'U', 'U', 'U'), $string ); $string = str_replace( array('ñ', 'Ñ', 'ç', 'Ç'), array('n', 'N', 'c', 'C',), $string ); $string = str_replace( array("\\", "¨", "º", "-", "~", "#", "@", "|", "!", "\"", "·", "$", "%", "&", "/", "(", ")", "?", "'", "¡", "¿", "[", "^", "<code>", "]", "+", "}", "{", "¨", "´", ">", "< ", ";", ",", ":", ".", " "), '-', $string ); return $string; } ?> redimiensionar_img() Código PHP: <?php /** * * XERIFANDTOMAS * * Redimensiona una image manteniendo las proporciones * * @param string $img ( OBILIGATORIO ) * ruta de la imagen * * @param string $nombre ( OBILIGATORIO ) * nombre para la imagen, extension incluida * * @param string $ruta ( OPCIONAL ) * Default: $_SERVER['DOCUMENT_ROOT']/img/ANCHOxALTO/ * ruta de la imagen final * * @param int $max_w ( OPCIONAL ) * Default: 200 * Ancho máximo de la imagen ( se mantienen proporciones ) * * @param int $max_h ( OPCIONAL ) * Default: 200 * Alto máximo de la imagen final ( se mantienen proporciones ) * * @param int $calidad ( OPCIONAL ) * Default: 90 * Calidad de la imagen, rango de 0 a 99 * * * * @return TRUE / FALSE * Devuelve TRUE en caso de exito y FALSE en caso de error */ function redimiensionar_img($img,$nombre,$max_w=200,$max_h=200,$ruta="",$calidad=90){
if ( !file_exists($img) ){ return false; } if ($ruta=="") { $ruta = $_SERVER['DOCUMENT_ROOT']."/img/".$max_w.'x'.$max_h.'/'; } if ( !file_exists($ruta) ) { if( !mkdir($ruta, 0775, true) ){ return false; } } if($calidad>99){ return false; }
list($w,$h)=getimagesize($img); $nombre = explode('.', $nombre);
$extension = end($nombre); switch ($extension) { case 'jpeg': $img_original = imagecreatefromjpeg($img); break; case 'jpg': $img_original = imagecreatefromjpeg($img); break; case 'png': $img_original = imagecreatefrompng($img); break; default: return false; break; } $x_ratio = $max_w / $w; $y_ratio = $max_h / $h; if( ($w <= $max_w) && ($h <= $max_h) ){ $w_final = $w; $h_final = $h; } elseif( ($x_ratio * $h) < $max_h ){ $w_final = $max_w; $h_final = ceil($x_ratio * $h); } else{ $w_final = ceil($y_ratio * $w); $h_final = $max_h; } $tmp=imagecreatetruecolor($w_final,$h_final); imagecopyresampled($tmp,$img_original,0,0,0,0,$w_final, $h_final,$w,$h); imagedestroy($img_original); switch ($extension) { case 'jpeg': $destino= $ruta.''.$nombre[0].'.jpeg'; imagejpeg($tmp,$destino,$calidad); break; case 'jpg': $destino= $ruta.''.$nombre[0].'.jpg'; imagejpeg($tmp,$destino,$calidad); break; case 'png': $calidad=floor($calidad/10); $destino= $ruta.''.$nombre[0].'.png'; imagepng($tmp,$destino,$calidad); break; default: return false; break; } return true; } ?> upload_img() Código PHP: <?php /** * * XERIFANDTOMAS * * Guarda una imagen en el servidor pasada * * @param array $file ( OBILIGATORIO ) * Debe de pasarse $_FILES habiendo subido los archivos en el form con name="myNombre[]" * * @param string $nombre ( OPCIONAL ) * Default: img * nombre para la imagen,los caracteres extraños seran cambiados por eliminar_simbolos() * Se añade marca de tiempo+identificador ( dmYHis-key ) * Ejemplo: MyImg-21022016154613-1.jpg * * @param string $ruta ( OPCIONAL ) * Default: $_SERVER['DOCUMENT_ROOT']/img/ * Ruta de la imagen final * * @param string $max_size ( OPCIONAL ) * Default: 5000000 (5MB) * Tamaño máximo permitido de la imagen * * @param int $max_archivos ( OPCIONAL ) * Default: 5 * Número máximo de archivos que se pueden subir a la vez * * * * @return ARRAY / String * En caso de éxito: Devuelve un array con los nombres de las imagenes * En caso de error: Debuelve un string con el mensaje de error */ function upload_img($file,$nombre="img",$ruta="",$max_size= "5000000",$max_archivos=5){ $tipos_de_archivos= array("image/jpeg","image/jpg","image/png");
if ($ruta=="") { $ruta = $_SERVER['DOCUMENT_ROOT']."/img/"; } if ( !file_exists($ruta) ) { if( !mkdir($ruta, 0775, true) ){ return false; } }
$key_files=array_keys($file); $numero_de_archivos= count($file[$key_files[0]]['name']); if ($numero_de_archivos<1) {return 'No se ha cargado ningun archivo.';} if ($numero_de_archivos>$max_archivos) {return 'Solo se pueden subir <b>'.$max_archivos.' archivos</b> a la vez.';} if ( !is_array($file[$key_files[0]]['tmp_name']) ){return 'Se deben subir los archivos como un array.';}
$tmp_name= $file[$key_files[0]]['tmp_name']; $type= $file[$key_files[0]]['type']; $size= $file[$key_files[0]]['size']; $name= $file[$key_files[0]]['name']; $error= $file[$key_files[0]]['error'];
foreach ($tmp_name as $k => $v) { if (!is_uploaded_file($v)) {return '<br/>El archivo <b>'.$name[$k].'</b> ha dado error.';} } foreach ($error as $k => $v) { if ($v!==0) {return '<br/>El archivo <b>'.$name[$k].'</b> ha dado error.';} } foreach ($type as $k => $v) { if (!in_array($v, $tipos_de_archivos)){return '<br/>El archivo <b>'.$name[$k].'</b> no esta permitido. Solo archivos JPG, JPEG, PNG.';} } foreach ($size as $k => $v) { if ($v>$max_size) {return '<br/>El archivo <b>'.$name[$k].'</b> supera el tamaño permitido.';} } foreach ($name as $k => $v) { $extension = end(explode('.', $v)); $nombre_final[$k]=eliminar_simbolos($nombre).'-'.date('dmYHis').'-'.$k.'.'.$extension; } foreach ($tmp_name as $k => $v) { if( redimiensionar_img($tmp_name[$k],$nombre_final[$k],200,200) ){}else{ return '<br/>Fallo redimensión.';} if( redimiensionar_img($tmp_name[$k],$nombre_final[$k],50,50) ){}else{ return '<br/>Fallo redimensión.';} } foreach ($tmp_name as $k => $v) { $destino= $ruta.$nombre_final[$k]; if(!move_uploaded_file($v, $destino)){return '<br/>No se ha podido mover el archivo al servidor.';} $n[]=$nombre_final[$k]; } return $n; } ?> Uso Código PHP: $archivos= upload_img($_FILES,$nombre);
Formulario html
Es importante el uso de corchetes [ ] en name="MyArchivo[]"
Código HTML:
Ver original<form action="myAction" method="post" enctype="multipart/form-data"> <input type="file" name="MyArchivo[]" multiple /> <input type="submit" value="Subir" />
Última edición por xerifandtomas; 26/03/2016 a las 14:54 |