Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    cancellare cartelle contenenti file

    Dovrei cancellare delle cartelle contenenti dei file (immagini) di cui però non conosco nè il nome nè il numero, tantomeno sono registrati in un database.

    Se faccio rmdir($nome_cartella); mi avvisa che la cartella non essendo vuota non può essere eliminata

    Ho provato questa soluzione
    http://free-script.it/post/Script_ph...cartelle-4.htm
    ma non cancella i file e l'avviso rimane.

  2. #2
    Prova ad utilizzare una delle tante funzioni di eliminazione ricorsiva presenti tra i commenti del manuale ufficiale:

    http://www.php.net/rmdir

  3. #3
    Ho trovato un codice che funziona. Tuttavia non mi reindirizza alla pagina di provenienza come vorrei. Mi sapreste dire come mai e cosa devo cambiare? Il mio sospetto è che sia a causa del doppio return true finale.
    Il codice è questo:
    codice:
    function deleteDir($dir) {
    if (substr($dir, strlen($dir)-1, 1) != '/') $dir .= '/';
    echo $dir;
    	if ($handle = opendir($dir)) {
            	while ($obj = readdir($handle)) {
               		if ($obj != '.' && $obj != '..') {
                    		if (is_dir($dir.$obj)) {
                        			if (!deleteDir($dir.$obj)) return false;
                    		} elseif (is_file($dir.$obj)) {
                        			if (!unlink($dir.$obj)) return false;
    						}
                	}
            }	
    
            closedir($handle);
    
            if (!@rmdir($dir)) return false;
            return true;
    	}
    return true; 
    }
    
    		
    
    		
    
    		if (file_exists($nome_cartella."/thumbs")) {
    		deleteDir($nome_cartella."/thumbs");
    		}
    		if (file_exists($nome_cartella)) {
    		deleteDir($nome_cartella);
    		}
    
    header("Location: elenchi.php");
    Mi dice che il redirect non viene fatto poichè è già stato richiesto in precedenza. La pagina resta ferma all'avviso. Però tutto il materiale, le sottocartelle e la cartella principale vengono cancellati ed è un buon passo avanti.

  4. #4
    Non è che dice una cosa tipo "PHP Warning: Cannot modify header information - headers already sent by ..."?

    In caso affermativo, rimuovi qualsiasi invio di dati al buffer di uscita prima di richiamare header (o qualsiasi altra funzione che utilizzi gli header) oppure abilita l'output buffering.

    P.S.
    Per rispetto dell'RFC, l'header location dovrebbe contenere un URL assoluto.

  5. #5
    Effettivamente il messaggio è:

    /var/www/web76/html/foto_autori/27/thumbs//var/www/web76/html/foto_autori/27/
    Warning: Cannot modify header information - headers already sent by (output started at /var/www/web76/html/modifica_db.php:160) in /var/www/web76/html/modifica_db.php on line 209

    Warning: Cannot modify header information - headers already sent by (output started at /var/www/web76/html/modifica_db.php:160) in /var/www/web76/html/modifica_db.php on line 534

    Considera che il codice postato prima è all'interno di un ciclo switch ed alla fine di ogni caso c'è una redirect.
    In tutta la pagina non è presente codice da far visualizzare, ne html ne php ad eccetto di echo $dir; della funzione.
    Con "invio di dati al buffer di uscita" intendi questo?

  6. #6
    output started at /var/www/web76/html/modifica_db.php:160
    Che cosa c'è alla riga 160 del file /var/www/web76/html/modifica_db.php ?

  7. #7
    Ok ho risolto. Scusa se rispondo solo ora ma oggi non ho più avuto tempo di dedicarmi a questo. Effettivamente è come dicevi tu: tolto echo la pagina reindirizza in modo corretto. Infatti alla riga 160 c'era proprio echo $dir; (la terza riga della funzione, che ho tolto). 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.