txt - reemplazar archivo php
Cómo eliminar una carpeta con contenido usando PHP (6)
Aquí hay un script que hará justo lo que necesita:
/**
* 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 (!@unlink($dir . ''/'' . $obj))
{
unlinkRecursive($dir.''/''.$obj, true);
}
}
closedir($dh);
if ($deleteRootToo)
{
@rmdir($dir);
}
return;
}
Lo obtuve de php.net y funciona.
Esta pregunta ya tiene una respuesta aquí:
- ¿Eliminar directorio con archivos en él? 30 respuestas
Necesito eliminar una carpeta con contenido usando PHP. rmdir()
y unlink()
eliminan carpetas vacías, pero no pueden eliminar carpetas que tienen contenido.
Debe recorrer el contenido de la carpeta (incluidos los contenidos de las subcarpetas) y eliminarlos primero.
Aquí hay un ejemplo: http://lixlpixel.org/recursive_function/php/recursive_directory_delete/
¡Ten cuidado con eso!
Deberá eliminar todos los archivos recursivamente. Hay muchas funciones de ejemplo en los comentarios de la página de manual de rmdir
:
Esta función le permitirá eliminar cualquier carpeta (siempre que sea escribible) y sus archivos y subdirectorios.
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 sin recursion 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;
}
No existe una estructura de función única en PHP que permita esto, usted debe escribir el suyo con rmdir y desvincularse.
Un ejemplo (tomado de un comentario en 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 );
}
?>
Siempre shell_exec("rm -rf /path/to/folder");
hacer trampa y shell_exec("rm -rf /path/to/folder");