This article will show you how to delete a single file or multiple files in PHP using the unlink() function, and provide code examples.
Once you have file uploads working in PHP, you may want to allow your users to delete files they no longer wish to keep. Read on to find out how.
There is no PHP Function called ‘Delete’
To clear up any confusion, unlink() is the function for deleting files in PHP. There is no built in PHP function called delete().
If you’re looking to delete a directory in PHP, check out the rmdir() function.
unlink() PHP Function Syntax
The syntax for the unlink() function used to delete files in PHP is as follows:
unlink($FILENAME, $CONTEXT)
Note that:
- $FILENAME should be the path to the file you wish to be deleted
- It can be a path relative to the running PHP script, or a system path
- If the path specified is a soft (symbolic link), the link will be deleted, not the file it links to
- $CONTEXT is an optional parameter which can be used to specify a context stream
- This option is rarely used, you can probably ignore it
- unlink() will return a boolean value
- TRUE if successful, FALSE if not successful
Deleting a Single File
Here’s how to delete a single file with the unlink() function in PHP.
Ensure The File is Closed Before Deleting
First, if you have been using the file in your PHP script, you must ensure it is closed, otherwise the delete operation will fail.
// Close an open file pointer fclose($filePointer);
Deleting the File from the Disk
If there are no open references to the file (or the file was never opened in the first place), it can be deleted with the unlink() function by specifying a path:
// Then unlink the file by its path $pathToFile = 'path/to/file.txt'; unlink($pathToFile);
Using realpath() to Fix Path Issues
If you run into trouble with your paths (due to them containing symbolic links, containing extra slashes or because they are relative paths which do not resolve properly), you can try using the realpath() function to delete the file using the absolute path:
unlink(realpath($pathToFile));
Deleting Multiple Files Matching a Pattern
Multiple files can be deleted by using the glob() function to search for all files with names matching a certain pattern. Below, all files with the .txt file extension are found and then removed:
foreach (glob("*.txt") as $pathToFile) { unlink($pathToFile); }
This code can be shortened by using array_map():
array_map('unlink', glob("path/to/files/*.txt"));
The unlink() function is called by it’s function name, while array_map() loops over the array results provided by glob().