Cambiar la extensión de varios archivos con PHP

Suele suceder a muchos de mis clientes que usan OsCommerce y Zen-Cart que cuando suben las imágenes de los productos vía FTP la extensión de los archivos está en mayúsculas pero en la base de datos aparece el mismo archivo con la extensión en minúsculas. Resultado: la imagen no se puede encontrar. Algunos de ellos optan por la solución de renombrar las imágenes y volver a subirlas pero, dado que era muy incómodo, escribí este pequeño código que renombra las imágenes directamente en el servidor:

// Corregir las extensiones de los ficheros de imágenes. Cambiar las extensiones en mayúsculas por minúsculas.

$directorio_imagenes = 'images/';
if ($directorio = dir($directorio_imagenes))
{
	while ($fichero = $directorio->read())
	{
		$info_fichero = pathinfo($fichero);
		// Si la extensión no está en minúsculas ponerla en minúsculas
		if (isset($info_fichero['extension']) && $info_fichero['extension']!=strtolower($info_fichero['extension']))
		{
			$info_fichero['basename_we'] = substr($info_fichero['basename'], 0, -(strlen($info_fichero['extension']) + ($info_fichero['extension'] == '' ? 0 : 1)));
			rename(
				$directorio_imagenes . $info_fichero['basename'],
				$directorio_imagenes . $info_fichero['basename_we'] . '.' . strtolower($info_fichero['extension'])
				);
			echo '<br/>' . $info_fichero['basename'] . ' cambiado.';
				
		}
	}
}

El script busca en el directorio especificado los directorios con la extensión en mayúsculas y los cambia a minúsculas. La “magia” se hace con este if:

if (isset($info_fichero['extension']) && $info_fichero['extension']!=strtolower($info_fichero['extension']))

que compara la extensión del fichero con su versión en minúsculas. Esto detecta las extensiones como: .JPG, Jpg, jpG y las convierte a .jpg.

Un sencillo programita que puede ahorrarnos muchas horas de trabajo. Esta versión sólo busca en un único directorio, no sería muy difícil modificarlo para que busque también en los subdirectorios.

6 thoughts on “Cambiar la extensión de varios archivos con PHP

  1. es muy bueno el articulo pero tambien queria ver si me podrias ayudar para saber como puedo cambiar las extensiones no solo de mayusculas a minusculas sino de una extension .pdf a .eml

  2. La parte que cambia la extensión del fichero es:

    strtolower($info_fichero[‘extension’])

    puedes sustituirla por, por ejemplo ‘eml’.

    También tendrías que cambiar la parte:

    $info_fichero[‘extension’]!=strtolower($info_fichero[‘extension’])

    por:

    $info_fichero[‘extension’]==’pdf’

  3. Comunico que he cambiado un archivo con extension tif a gif satisfactoriamente con el script mensionado anteriomente, pero lo que deseo es poder no solo renombrar el archivo, sino tambien convertir de tif a gif que es muy diferente renombrarlo, si alguien me puede ayudar se lo agradezco.

Deja un comentario