Es necesario ejecutarlo desde un servidor web.
<?php
/**
* Recorrer directorios y listar todas las imágenes disponibles.
*
* @param string $dir El directorio a recorrer.
* @return array Lista de todas las imágenes disponibles.
*/
function listarTodasLasImagenes($dir) {
echo '<h1>Todas</h1>';
$imagenes = [];
$extensionesPermitidas = ['jpg', 'jpeg', 'png', 'gif', 'svg', 'webp'];
// Crear un iterador recursivo para recorrer el directorio
$iterador = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($dir));
foreach ($iterador as $archivo) {
if ($archivo->isFile()) {
$extension = pathinfo($archivo->getFilename(), PATHINFO_EXTENSION);
if (in_array(strtolower($extension), $extensionesPermitidas)) {
$string = $archivo->getPathname();
$pos = strpos($string, 'assets');
$imgPathOK = substr($string, $pos);
$imagenes[] = $imgPathOK;
echo $imgPathOK.'<br>';
}
}
}
return $imagenes;
}
/**
* Recorrer directorios y listar imágenes usadas en el proyecto.
*
* @param string $dir El directorio a recorrer.
* @return array Lista de imágenes encontradas.
*/
function listarImagenesUsadas($dir) {
echo '<h1>Usadas</h1>';
$imagenes = [];
$extensionesPermitidas = ['jpg', 'jpeg', 'png', 'gif', 'svg', 'webp'];
// Crear un iterador recursivo para recorrer el directorio
$iterador = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($dir));
foreach ($iterador as $archivo) {
if ($archivo->isFile()) {
$contenido = file_get_contents($archivo->getPathname());
// Buscar referencias a imágenes en el contenido del archivo
preg_match_all('/<img[^>]+src=["\']([^"\']+)["\']/i', $contenido, $coincidencias);
preg_match_all('/url\(["\']?([^"\')]+)["\']?\)/i', $contenido, $coincidenciasCSS);
// Agregar las imágenes encontradas a la lista
foreach ($coincidencias[1] as $imagen) {
$extension = pathinfo($imagen, PATHINFO_EXTENSION);
if (in_array(strtolower($extension), $extensionesPermitidas)) {
$imagenes[] = $imagen;
echo 'T1 '.$imagen.'<br>';
}
}
foreach ($coincidenciasCSS[1] as $imagen) {
$extension = pathinfo($imagen, PATHINFO_EXTENSION);
if (in_array(strtolower($extension), $extensionesPermitidas)) {
$imagenes[] = $imagen;
echo 'T2 '.$imagen.'<br>';
}
}
}
}
return array_unique($imagenes);
}
// Directorio del proyecto y de las imágenes
$directorioProyecto = '../www/es_ES';
$directorioImagenes = '../www/es_ES/assets/images';
$directorioUnused = '../www/es_ES/unused-imgs';
// Obtener la lista de todas las imágenes disponibles
$todasLasImagenes = listarTodasLasImagenes($directorioImagenes);
// Obtener la lista de imágenes usadas en el proyecto
$imagenesUsadas = listarImagenesUsadas($directorioProyecto);
// Convertir las rutas relativas de las imágenes usadas a absolutas
$imagenesUsadasAbsolutas = array_map(function($imagen) use ($directorioProyecto) {
return realpath($directorioProyecto . '/' . $imagen);
}, $imagenesUsadas);
// Encontrar las imágenes no usadas
$imagenesNoUsadas = array_diff($todasLasImagenes, $imagenesUsadas);
// Imprimir la lista de imágenes no usadas
echo "<h1>Imágenes no usadas en el proyecto:</h1>";
foreach ($imagenesNoUsadas as $imagen) {
$nombreImagen = basename($imagen);
echo $imagen . "<br/>";
$nuevoPath = $directorioUnused . '/' . $nombreImagen;
if (rename('../www/es_ES/'.$imagen, $nuevoPath)) {
echo "Movida: $imagen -> $nuevoPath<br/>";
} else {
echo "Error al mover: $imagen<br/>";
}
}
?>
