Diciembre 28th, 2007

Asignar a multiples zips, nombre que contiene dentro del .zip

Hace poco, por una razón X, he tenido que renombrar todos unos zips del tipo 92832.zip al contenido que tenían dentro. Con esté script que pongo a disposición de todos, se puede lograr en un rato, está en php.

define('ZIP_DIR','zips/');
define('ZIP_DIR_NUEVO','zipsNuevos/');

if(!dl('php_zip.dll')) die('Necesita la extension ZIP');
$zipDir = dir(ZIP_DIR);
while(false !==($zipArchivo = $zipDir->read()))
{
$zipDirArchivo = ZIP_DIR.$zipArchivo;
if('.zip'==substr($zipArchivo, -4)
    && is_file($zipDirArchivo))
{
    $zip = zip_open($zipDirArchivo);
    if($zip)
    {
    $zipEntradaNombre = basename(zip_entry_name(zip_read($zip)));
    $zipEntradaExt = strrpos($zipEntradaNombre, '.');
    $zipNuevoNombre = substr($zipEntradaNombre, 0,
            ($zipEntradaExt?$zipEntradaExt:strlen($zipEntradaNombre)));
    $zipNuevoNombre = ucwords(str_replace('.', ' ', $zipNuevoNombre));
    $zipNuevoNombreDir = ZIP_DIR_NUEVO.$zipNuevoNombre.'.zip';
    zip_close($zip);

    if(file_exists($zipNuevoNombreDir))
    {
        $i=0;
        while(file_exists($zipNuevoNombreDir =
                ZIP_DIR_NUEVO.$zipNuevoNombre.'_'.$i.'.zip'))
                $i++;
    }

    echo (rename($zipDirArchivo, $zipNuevoNombreDir) ?
        'Renombrado':'Error al renombrar').":
            $zipDirArchivo => $zipNuevoNombreDir\r\n";
    }
}
}
$zipDir->close();