PHP: Array, nombre y extensión
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.
Comentarios
Comentarios en aquí