PHP: Array, nombre y extensión - Userlinux.net

PHP: Array, nombre y extensión: Siempre hay una típica función que se reutiliza para cantidad de proyectos y se puede mejorar notablemente. En este caso se trata de separar nombre y extensión de un fichero. Nada del otro mundo pe...

PHP: Array, nombre y extensión

Siempre hay una típica función que se reutiliza para cantidad de proyectos y se puede mejorar notablemente. En este caso se trata de separar nombre y extensión de un fichero. Nada del otro mundo pero podemos llegar a hacer verdaderas locuras para ello:

En el caso más simple casi cualquier cosa valdría:
$file="nombre.jpg";
$extension = array_pop(explode('.',$file)); // Sacaría "jpg"
$nombre = array_shift(explode('.',$file));  // Sacaría "nombre"


Pero las disertaciones fueron un poco más allá. Suponiendo otro nombre de archivo un poco más tocapelotas -nombre.apellido.jpg- ya no valdría dicha funcionalidad. Y ahí empezó el dilema.

Una solución válida -aunque no del todo, ahora veremos el motivo- podría ser esta que propuso Mamel.
$a = array(
 'a' => substr($file, 0, strlen($file)-4),
 'e' => substr($file, 0, -3),
)
Enseguida nos dimos cuenta de que una suposición podría tirar al traste con el array: ¿y si la extensión tiene más de 3 caracteres?. El jpeg existe, entre muchas otras.

También Nacho (próximamente enlace a su blog) aportó su granito de arena:
$a = array (
 'a' => substr($file, 0, strpos('.',$file)),
 'e' => substr($file, strpos('.',$file)+1, strlen($file)),
)
Pero nos seguía pareciendo demasiado complicado para el cometido. Tenía que haber algo más sencillo en PHP.

Y así llegamos a la refinitiva (solo a partir de php 5.2 saca filename, antes de ésta versión solo informa de la ruta y extensión):
$file2 = pathinfo($file);
Array
(
    [dirname] => .
    [basename] => nombre.apellido.jpg
    [extension] => jpg
    [filename] => nombre.apellido
)
Y en caso de no tener php 5.2 siempre podemos partir de la extensión para sacar el resto de información que nos falta:
$file3 = basename($file, '.'.$file2['extension']);
Múltiples formas de solucionar un pequeño entuerto en PHP. Todas correctas y unas más acertadas que otras.
 
Archived on : programación
Tags : php array

1 Comentarios

gravatar
16.Sep.2008
Ahi va mi versión, una más no hará daño :)

Comentarios en aquí

function filedata($path) {
// Vaciamos la caché de lectura de disco
clearstatcache();
// Comprobamos si el fichero existe
$data["exists"] = is_file($path);
// Comprobamos si el fichero es escribible
$data["writable"] = is_writable($path);
// Leemos los permisos del fichero
$data["chmod"] = ($data["exists"] ? substr(sprintf("%o", fileperms($path)), -4) : FALSE);
// Extraemos la extensión, un sólo paso
$data["ext"] = substr(strrchr($path, "."),1);
// Primer paso de lectura de ruta
$data["path"] = array_shift(explode(".".$data["ext"],$path));
// Primer paso de lectura de nombre
$data["name"] = array_pop(explode("/",$data["path"]));
// Ajustamos nombre a FALSE si está vacio
$data["name"] = ($data["name"] ? $data["name"] : FALSE);
// Ajustamos la ruta a FALSE si está vacia
$data["path"] = ($data["exists"] ? ($data["name"] ? realpath(array_shift(explode($data["name"],$data["path"]))) : realpath(array_shift(explode($data["ext"],$data["path"])))) : ($data["name"] ? array_shift(explode($data["name"],$data["path"])) : ($data["ext"] ? array_shift(explode($data["ext"],$data["path"])) : rtrim($data["path"],"/")))) ;
// Ajustamos el nombre a FALSE si está vacio o a su valor en caso contrario
$data["filename"] = (($data["name"] OR $data["ext"]) ? $data["name"].($data["ext"] ? "." : "").$data["ext"] : FALSE);
// Devolvemos los resultados
return $data;
}

Deja un comentario

Tu nombre
Tu email
http://
  « Captcha

[ Userlinux 2001 ~ 2009 | Sindicación ]