Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2013
    Messaggi
    20

    cancellare directry non vuota

    ciao a tutti...
    allora per cancellare delle cartelle sul serve mi avvalgo di questo script:

    <?php

    $nome = $_POST['nome_album'];
    $cartella = "images/gallery/foto/$nome/";
    $apertura = opendir($cartella);
    $log = array();
    while (false !== ($file = readdir($apertura)))
    {
    if (!is_dir($file))
    {echo $file;
    $log[] = $file;
    unlink($cartella.$file);
    }
    }
    closedir($apertura);

    rmdir("$cartella");

    header("Location: cancella_album.php");

    ?>

    dove tramite un form gli indico la cartella da eliminare e fin qui tutto bene.

    Il problema nasce quando per errore gli comunico il nome di una cartella inesistente ovvero cosa succede: mi escono una carrellata di errori che si continuano a generare all'infinto mandandomi in palla il browser.
    come posso eliminare questi errori?
    grazie per l'attenzione

  2. #2
    Utente di HTML.it L'avatar di boots
    Registrato dal
    Oct 2012
    Messaggi
    1,626
    metti un controllo sulla cartella: se non esiste, non fare niente

  3. #3
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,503
    Dovresti anche discriminare i casi in cui $file sia uguale a . e ..
    quelli lì ti fanno andare su e giù.
    Io uso questa funzione per eliminare le cartelle, occhio che in caso ci sia qualcosa dentro la cartella che vuoi cancellare (file e/o sottocartelle), questo elimina tutto, quindi se tu vuoi cancellare solo cartelle vuote non va bene.

    Codice PHP:
    //presuppone che alla fine della directory passata non ci sia lo /
    function delete_directory($dirname)
    {
        
    $dirname trim($dirname);
        
        if (
    $dirname != '')
        {
            if (
    is_dir($dirname))
            {
                
    $dir_handle opendir($dirname);
            }
            else
            {
                return 
    FALSE;
            }
                    
            if ( ! 
    $dir_handle )
            {
                return 
    FALSE;
            }
            
            while(
    $file readdir($dir_handle))
            {
                if (
    $file != "." && $file != "..")
                {
                    if (!
    is_dir($dirname.'/'.$file))
                    {
                        
    //è un file, lo cancello
                        
    if ( ! unlink($dirname.'/'.$file) )
                        {
                            return 
    FALSE;
                        }
                    }
                    else
                    {
                        
    //è una sottocartella, ricorsione per eliminarla
                        
    if ( ! delete_directory($dirname.'/'.$file) )
                        {
                            return 
    FALSE;
                        }
                    }
                }
            }
            
    closedir($dir_handle);
            
            if(
    rmdir($dirname))
            {
                return 
    TRUE;
            }
            else
            {
                return 
    FALSE;
            }
        }
        else
        {
            return 
    FALSE;
        }


  4. #4
    Utente di HTML.it
    Registrato dal
    Mar 2013
    Messaggi
    20
    @boots
    mi piacerebbe farlo ma purtroppo sono prorpio agli inizi con il php... se mi puoi dare una mano mi faresti un favore

    @Alhazred

    ho provato a inserire lo script così Ama non mi funziona dove sbaglio?

    <?php

    $nome = $_POST['nome_album'];
    $dirname = "images/gallery/foto/$nome/";
    function delete_directory($dirname)
    {
    $dirname = trim($dirname);

    if ($dirname != '')
    {
    if (is_dir($dirname))
    {
    $dir_handle = opendir($dirname);
    }
    else
    {
    return FALSE;
    }

    if ( ! $dir_handle )
    {
    return FALSE;
    }

    while($file = readdir($dir_handle))
    {
    if ($file != "." && $file != "..")
    {
    if (!is_dir($dirname.'/'.$file))
    {
    //è un file, lo cancello
    if ( ! unlink($dirname.'/'.$file) )
    {
    return FALSE;
    }
    }
    else
    {
    //è una sottocartella, ricorsione per eliminarla
    if ( ! delete_directory($dirname.'/'.$file) )
    {
    return FALSE;
    }
    }
    }
    }
    closedir($dir_handle);

    if(rmdir($dirname))
    {
    return TRUE;
    }
    else
    {
    return FALSE;
    }
    }
    else
    {
    return FALSE;
    }
    }

    header("Location: cancella_album.php");

    ?>

  5. #5
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,503
    E' una funzione la devi chiamare, altrimenti da sola sta lì a fare niente.
    Codice PHP:
    $nome $_POST['nome_album'];
    $dirname "images/gallery/foto/$nome";
    delete_directory($dirname); 
    quando posti il codice sul forum, mettilo tra i tag [php ] e [/php ] (senza spazio tra php e ], ce l'ho messo altrimenti non vedresti i tag).

  6. #6
    Utente di HTML.it
    Registrato dal
    Mar 2013
    Messaggi
    20
    per il momento ho risolto così
    Codice PHP:
    <?php

    $nome 
    $_POST['nome_album'];
    $cartella "images/gallery/foto/$nome/";

    if (
    is_dir("$cartella"))
        {
            echo 
    "La cartella esiste!";
        }
        else
        {
            
    header("Location: cancella_album.php");
        }


    $apertura opendir($cartella);
    $log = array();
    while (
    false !== ($file readdir($apertura)))
    {
            if (!
    is_dir($file))
            {echo 
    $file;
                
    $log[] = $file;
                 
    unlink($cartella.$file);
            }    
    }
    closedir($apertura);

    rmdir("$cartella");

    header("Location: cancella_album.php");

    ?>
    appena capisco come chiamare la funzione userò il tuo scrip... grazie ancora

  7. #7
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,503
    Cosa c'è da capire?
    Te l'ho scritto

    all'inizio del file ci metti la funzione, poi sotto:

    $nome = $_POST['nome_album'];
    $dirname = "images/gallery/foto/$nome";
    delete_directory($dirname); //così stai chiamando la funzione che sta sopra

    occhi che alla fine di $dirname non c'è lo slash /

  8. #8
    Utente di HTML.it
    Registrato dal
    Mar 2013
    Messaggi
    20
    eh eh eh scusa ho avuto una svista... funziona... grazie

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.