Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2007
    Messaggi
    542

    Procedura cancellazione File e Cartella

    Ciao a tutti,
    ho questa funzione ricorsiva per cancellare una cartella con tutti i file ma i file non vengono cancellati.
    La cartella ha sicuramente permessi 777 mentre i file no quindi prima di cancellare un file la procedura esegue chmod($file, 0777) cercando di assegnare tutti i permessi.

    Codice PHP:
    function deltree($dir

      
    $handle = @opendir($dir); 
      if (!
    $handle) { 
        return; 
      } 

      while ((
    $file readdir($handle)) !== false) { 
        if (
    is_file($file)) { 
          
    chmod($file0777);
          @
    unlink($dir DIRECTORY_SEPARATOR $file); 
        } elseif (
    is_dir($file) && $file != '.' && $file != '..') { 
          
    deltree($dir DIRECTORY_SEPARATOR $file); 
        } 
      } 

      
    closedir($handle); 
      @
    rmdir($dir); 

    Qualcuo vede quelche errore?
    Grazie
    Guidino

  2. #2
    Utente di HTML.it
    Registrato dal
    Sep 2007
    Messaggi
    398
    Cosi su due piedi no la prima cosa che farei e' cancellare quelle orrende chiocciole
    cosi vedi se lo script da problemi.


    E' un pessimo modo di programmare quello gli errori vanno gestiti non vanno nascosti sotto il tappeto



    Andrea

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2007
    Messaggi
    542

    Cancellazione file

    Grazie per la risposta,
    mi potresti indicare il modo corretto per gestire gli errori?
    Guidino

  4. #4
    Utente di HTML.it
    Registrato dal
    Jan 2007
    Messaggi
    542
    Nessun aiuto?
    Guidino

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2007
    Messaggi
    398
    domani

  6. #6
    Utente di HTML.it
    Registrato dal
    Sep 2007
    Messaggi
    398
    prima di tutto ti consiglio di mettere all'inizio dei tuoi script queste due linee

    Codice PHP:
    error_reporting (E_ALL|E_STRICT);
    ini_set ('display_errors','on'); 
    Quando vai in produzione metti display errors a off cosi non li fa vedere
    ma in fase di sviluppo mantieni on.

    Alla luce di queste funzioni non utilizzare mai la chiocciola perche' se sei in sviluppo e vuoi vedere gli errori devi cavarla in ogni punto.

    Inoltre piu che aprire un file e nascondere l'errore che puo dare se questo file non esiste
    e' meglio fare i dovuti controlli prima e gestirli ad esempio

    Codice PHP:
    function deltree($dir) {   
         if (!
    is_string($dir))  {
            echo 
    "Il nome della cartella non e' valido\n";
            return;   
         } 

         if (!
    is_writable($dir)) {
            echo 
    "Non si dispongo dei diritti necessari per eliminare la cartella\n";
            return;   
         } 

         
    $handle opendir($dir);
         if (!
    $handle)   {     return;   } // questo controllo e' per un ulteriore sicurezza ma non dovremme mai capitare visti i controlli precedenti
    .
    .

    Andrea

  7. #7
    Utente di HTML.it
    Registrato dal
    Jan 2007
    Messaggi
    542
    Ti ringrazio molto, sei stato di parola.
    Metterò in pratica i tuoi consigli.

    Mi potresti dire qualcosa su come impostare i permessi di un file a 777 prima di tentare la cancellazione se non sono a 777?

    E' corretto fare:

    Codice PHP:
       if (is_file($file)) { 
          
    chmod($file0777); 
          
    unlink($dir DIRECTORY_SEPARATOR $file); 
       } 
    supponendo che $file sia il percorso completo?

    Grazie mille
    Guidino

  8. #8
    Utente di HTML.it
    Registrato dal
    Sep 2007
    Messaggi
    398
    se $file e' il percorso completo devi fare

    Codice PHP:
    if (is_file($file)) {    
       
    chmod($file0777);
       
    unlink($file);

    ma read dir da quello che ho letto non restituisce il percorso completo quindi
    Codice PHP:
    if (is_file($file)) {
           
    chmod($dir DIRECTORY_SEPARATOR $file0777);
           
    unlink($dir DIRECTORY_SEPARATOR $file);
        } 
    comunque visto che se ti rimane un file la cartella non riesci piu a cancellarla sarebbe meglio fare una cosa del genere (l'ho scritta al volo quindi magari ci sono errori di sintassi)

    Codice PHP:
    function deltree($dir)
    {
         if (!
    is_string($dir))  {
            echo 
    "Il nome della cartella non e' valido\n";
            return 
    false;   
         }

         if (!
    is_writable($dir)) {
            echo 
    "Non si dispongo dei diritti necessari per eliminare la cartella\n";
            return 
    false;   
         }

         
    $handle opendir($dir);
         if (!
    $handle)   {     return;   } 

         while ((
    $file readdir($handle)) !== false) {
             if (
    is_file($file)) {
                  
    chmod($dir DIRECTORY_SEPARATOR $file0777);
                  if (
    unlink($dir DIRECTORY_SEPARATOR $file) == false) {
                     echo 
    "errore nella cancellazione del file $file\n";
                     return 
    false;
                  }
               } elseif (
    is_dir($file) && $file != '.' && $file != '..') {
                   if (
    deltree($dir DIRECTORY_SEPARATOR $file) == false) {
                      echo 
    "errore nella cancellazione della cartella $dir\n";
                      return 
    false;
                   }
              }
         }

      
    closedir($handle);
      return 
    rmdir($dir);



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.