Eliminare Una Cartella Con Dei File

salve dovrei rimuovere una cartella con il suo contenuto, procedendo con “rmdir(getcwd().’/images’)”, elimino una cartella vuota…,io vorrei eliminare il contenuto e cartella,Ho un actionDelete per l’eliminazione dei record e al suo interno dovrei implementare ciò, sul mio controller ho questo:


public function actionDelete($id)

	{

		$model=$this->loadModel($id);


               //rimuovi cartella..in questo caso è vuota..

		rmdir(getcwd().'/images');




		$img_add = new GalleryImages();

	if ($img_add->gallery_id = $model->id) {

		

		$this->loadModel($id)->delete();

		$img_add->deleteAllByAttributes(array(),'`gallery_id` = :delete',array(

    									':delete'=>$model->id,

																));

		

	}


		//@todo rimuove anche gli elementi dalla directory


		// if AJAX request (triggered by deletion via admin grid view), we should not redirect the browser

		if(!isset($_GET['ajax']))

			$this->redirect(isset($_POST['returnUrl']) ? $_POST['returnUrl'] : array('admin'));

	}



girando sul web ho trovato questa funzione che se la lancio da uno script php normale(esterno al framework) fa il suo lavoro


<?php

function recursiveRemove($dir) {

    $structure = glob(rtrim($dir, "/").'/*');

    if (is_array($structure)) {

        foreach($structure as $file) {

            if (is_dir($file)) recursiveRemove($file);

            elseif (is_file($file)) unlink($file);

        }

    }

    rmdir($dir);

}


recursiveRemove("./image/image2/");




 ?>

non so come implementarla…,devo metterla sul model?

non devi metterla nel model, ma nel controller, deve diventare una private function

a questo punto la chiami dalla tua action con $this->nome_funzione

io sarei per uno shell_exec con il comando rm -rf se sei su linux

sia ben chiaro che devi SEMPRE accertarti di cosa vai a cancellare… ho visto programmatori friggersi l’intera root …

si sono su un server linux di prova(altervista)…,ora faccio delle prove

E’ andato tutto a buon fine!,ho eliminato i record del database e la cartella con i rispettivi file, usando la shell è un metodo più sicuro?,giusto per capire

usando shell_exec scrivi un unico comando, elimina il bisogno di un codice ricorsivo.

A livello di sicurezza è il medesimo, devi accertarci di costa stai per cancellare

visto che la cosa funziona, per farla proprio fatta bene l’ideale sarebbe che crei un componente, che so chiamato ‘FileHelper’, che contiene il metodo ‘removeDir’.

Quindi dentro al config/main.php dichiari il componente

A questo punto ogni controller/action che ne abbia bisogno lo richiama direttamente, per esempio




Yii::app()->fileHelper->removeDir($directory);



Favorisce il riuso del codice, ed è "più meglio" come Yii-way