19.11. Removing a Directory and Its Contents

Problem

You want to remove a directory and all of its contents, including subdirectories and their contents.

Solution

On Unix, use rm:

$directory = escapeshellarg($directory);
exec("rm -rf $directory");

On Windows, use rmdir:

$directory = escapeshellarg($directory);
exec("rmdir /s /q $directory");

Discussion

Removing files, obviously, can be dangerous. Be sure to escape $directory with escapeshellarg( ) so that you don’t delete unintended files.

Because PHP’s built-in directory removal function, rmdir( ) , works only on empty directories, and unlink( ) can’t accept shell wildcards, calling a system program is much easier than recursively looping through all files in a directory, removing them, and then removing each directory. If an external utility isn’t available, however, you can modify the pc_process_dir( ) function from Recipe 19.10 to remove each subdirectory.

See Also

Documentation on rmdir( ) at http://www.php.net/rmdir; your system’s rm or rmdir documentation, such as the Unix rm(1) manpage or the Windows rmdir /? help text.

Get PHP Cookbook now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.