Ho bisogno di cancellare una cartella con contenuti usando PHP. rmdir()
e unlink()
eliminano le cartelle vuote, ma non sono in grado di eliminare le cartelle con contenuti.Come eliminare una cartella con contenuti usando PHP
risposta
Questa funzione vi permetterà di eliminare qualsiasi cartella (a patto che sia scrivibile) ed è file e sottodirectory.
function Delete($path)
{
if (is_dir($path) === true)
{
$files = array_diff(scandir($path), array('.', '..'));
foreach ($files as $file)
{
Delete(realpath($path) . '/' . $file);
}
return rmdir($path);
}
else if (is_file($path) === true)
{
return unlink($path);
}
return false;
}
O senza ricorsione usando RecursiveDirectoryIterator
:
function Delete($path)
{
if (is_dir($path) === true)
{
$files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path), RecursiveIteratorIterator::CHILD_FIRST);
foreach ($files as $file)
{
if (in_array($file->getBasename(), array('.', '..')) !== true)
{
if ($file->isDir() === true)
{
rmdir($file->getPathName());
}
else if (($file->isFile() === true) || ($file->isLink() === true))
{
unlink($file->getPathname());
}
}
}
return rmdir($path);
}
else if ((is_file($path) === true) || (is_link($path) === true))
{
return unlink($path);
}
return false;
}
Ottimo metodo, uomo . Stavo usando il comando più semplice: Php system ("rm -r RESOURCE_PATH"); ?>, ma sfortunatamente alcuni server non consentono il comando di sistema, quindi il tuo (ho scelto il primo) è una sostituzione molto buona e semplice. Grazie Fratello. –
Funziona anche per percorsi relativi? Diciamo che il percorso completo è "/ var/www/html/folder_and_files_to_delete /" E lo script di cancellazione è posto in "/var/www/html/delete_folders_and_files.php". Posso semplicemente prendere "folder_and_files_to_delete" come percorso? – yoano
Mi piace, la migliore risposta – mghhgm
È necessario aggirare il contenuto della cartella (incluso il contenuto di qualsiasi sottocartella) e rimuoverlo per primo.
C'è un esempio qui: http://lixlpixel.org/recursive_function/php/recursive_directory_delete/
Fate attenzione con esso !!!
Si dovrà eliminare tutti i file in modo ricorsivo. Ci sono esempi di funzioni di abbondanza nei commenti della pagina rmdir
manuale:
spero che rmdir cancellerà solo la cartella che non ha contenuti. se ha contenuti non cancellerà la cartella. – Fero
Proprio così Fero - rmdir non rimuoverà una directory che ha contenuti, motivo per cui è necessario eliminare prima qualsiasi contenuto se si vuole eliminare una directory (incluso il contenuto di qualsiasi sottodirectory) – Fenton
Non esiste un'unica funzione integrata in PHP che permetterebbe questo, è necessario scrivere il proprio con rmdir e scollegare.
Un esempio (preso da un commento su php.net docs):
<?
// ensure $dir ends with a slash
function delTree($dir) {
$files = glob($dir . '*', GLOB_MARK);
foreach($files as $file){
if(substr($file, -1) == '/')
delTree($file);
else
unlink($file);
}
rmdir($dir);
}
?>
Che cos'è GLOB_MARK? – Randell
@Randell: GLOB_MARK - Aggiunge una barra a ciascuna directory restituita. –
Ecco uno script che farà proprio quello che serve:
/**
* Recursively delete a directory
*
* @param string $dir Directory name
* @param boolean $deleteRootToo Delete specified top-level directory as well
*/
function unlinkRecursive($dir, $deleteRootToo)
{
if(!$dh = @opendir($dir))
{
return;
}
while (false !== ($obj = readdir($dh)))
{
if($obj == '.' || $obj == '..')
{
continue;
}
if ([email protected]($dir . '/' . $obj))
{
unlinkRecursive($dir.'/'.$obj, true);
}
}
closedir($dh);
if ($deleteRootToo)
{
@rmdir($dir);
}
return;
}
ho presa da php.net e funziona .
Forse un approccio migliore è utilizzare rm
(se si è sotto linux). Sarebbe andare qualcosa come questo ($root
dovrebbe sempre essere impostato per la vostra TMP directory
per evitare l'eliminazione di file vitali!):
function remove($dir) {
$root = $_SERVER['DOCUMENT_ROOT'].'/tmp/';
if (is_dir($root.$dir)) {
exec('rm -rf '.$root.$dir);
}
}
remove ("/") ... renderà tutto felice :) –
Yikes. I comandi della shell dovrebbero essere evitati. – Volomike
L'ELIMINAZIONE DI FILE COME IN UN'APP WEB DEVE ESSERE EVITATA. DARE PERCORSI RELATIVI PU DEL CANCELLARE QUALSIASI FILE NEL SISTEMA SE L'UTENTE APP HA AUTORIZZATO. – ArunaFromLK
- 1. Come eliminare una cartella con tutti i contenuti utilizzando un file bat in Windows?
- 2. Come eliminare un modello usando php artisan?
- 3. Cancellare una cartella e tutti i suoi contenuti con Qt?
- 4. Come visualizzare le immagini da una cartella usando php - PHP
- 5. Come eliminare una cartella in C++?
- 6. Come eliminare un file dalla cartella usando javascript?
- 7. Come eliminare una sessione PHP?
- 8. Come decomprimere una cartella zip usando il codice php
- 9. Come rinominare una cartella usando Ant?
- 10. Come eliminare una cartella in modo asincrono
- 11. Come eliminare una cartella dal repository Bitbucket?
- 12. Elimina la cartella con i contenuti da Firebase Storage
- 13. Come posso cancellare i contenuti in una cartella usando uno script bash?
- 14. cartella compressa/archivio usando lo script php
- 15. Recupera i contenuti di una cartella Dropbox pubblica?
- 16. wix - come eliminare la cartella non vuota
- 17. Come posso sostituire una parola con tutti i file contenuti in una cartella in Vim?
- 18. Come caricare la cartella con PHP?
- 19. php: rimuovi parentesi/contenuti da una stringa?
- 20. Ignorando i contenuti di una cartella già archiviata?
- 21. Msbuild - come eliminare il contenuto della cartella ma non la cartella stessa?
- 22. Come aggiungere un'immagine ai contenuti usando HAML?
- 23. PHP: il modo più semplice per eliminare una cartella (incluso il suo contenuto)
- 24. Come cancellare tutti i contenuti di una cartella con Ruby-Rails?
- 25. Robocopy contenuti di copia della cartella corrente
- 26. Come posso includere una cartella con cx_freeze?
- 27. È sicuro eliminare la cartella "InetPub"?
- 28. Come eliminare in modo ricorsivo una cartella con i file all'interno di FtpWebRequest?
- 29. rinominare la cartella in sottocartella con PHP
- 30. Come ascoltare una porta TCP usando PHP?
@@ Maerlyn: Ho postato questa domanda in data 26 agosto 2009. Quello che lei ha citato duplicato è stato pubblicato il 28 luglio 2010 .. Credo che tu sappia cosa fare ORA ... Prima di fare qualcosa per favore verifica una volta. – Fero