[Okta Webinar] Learn how to a build a cloud-first strategyRegister Now

x
• Status: Solved
• Priority: Medium
• Security: Public
• Views: 305
• Last Modified:

# delete folder/contents based on date

I have a test environment where I create a group of sub folders within a parent folder.
Each of the sub-folders has a number of documents in each.

ie.
Parent Folder
Subfolder A
file1
file2
Subfolder B
file1

I want to create a cron task that will run a script which will remove any subdirectory that is 2 days old.

My challenge is to cycle thru all contents of parentfolder, examine the date of each folder and if the date is older than 2 day delete the contents that folder and then the folder itself.

I don't know the names of the folders in advance

If I use code such as
readdir($parentFolder) who do I tell if the item is a folder or a file This script doesn't need to be recursive, as there are not folders within subFolders 0 joomla Asked: • 7 • 6 1 Solution Commented: You can use a simple php page to do that. Use the stat() to get date info Exemple_:$stat = stat('\path\to\directory');
echo 'Modification time: ' . $stat['mtime']; // will show unix time stamp. Modifiy the script to compare the mtime with current time minus 2 days... /** * Delete a file/recursively delete a directory * * NOTE: Be very careful with the path you pass to this! * * @param string$path The path to the file/directory to delete
* @return void
*/
function delete_recursive($path) { if (is_dir($path))
{
$iterator = new RecursiveIteratorIterator( new RecursiveDirectoryIterator($path, RecursiveDirectoryIterator::SKIP_DOTS),
RecursiveIteratorIterator::CHILD_FIRST
);

foreach ($iterator as$file)
{
if ($file->isDir()) { rmdir($file->getPathname());
}
else
{
unlink($file->getPathname()); } } rmdir($path);
}
else
{
unlink($path); } } 0 Author Commented: Hi, thanks for your follow up and help I'm not familiar with the RecursiveIteratorIterator class With slight modification for variable names I get the following error Fatal error: Undefined class constant 'SKIP_DOTS' Do I need to declare anything before using the class ? regards M 0 Commented: Try to include php_fileinfo.dll as an extension in php.ini 0 Author Commented: forgive me for not knowing but is this a windows solution ? 0 Commented: Its not about SO. But did you have PHP version 5.3.x ?? 0 Commented: This is supported starting with PHP 5.3. 0 Author Commented: Sorry Using 5.2.11 0 Commented: You can try to use only the new RecursiveIteratorIterator(new RecursiveDirectoryIterator($startpath), RecursiveIteratorIterator::CHILD_FIRST)
0

Author Commented:
thanks for the advice
that works to a large degree

however, it does two things that I hadn't wanted
1. it deletes files in the parentFolder.... I only want to delete subFolders
2. it deletes the parentFolder as well

So, if I call the function
delete_recursive($parentFolder); everthing, including the parentFolder is deleted thanks m 0 Commented: Just put a simple if to skip base path... 0 Author Commented: I'm sorry, but how do it apply an if statement to check for the base path I'm not familiar with this class 0 Commented: Try to ignore the self remove path function delete_recursive($path)
{
if (is_dir($path)) {$iterator = new RecursiveIteratorIterator(
new RecursiveDirectoryIterator($path, RecursiveDirectoryIterator::SKIP_DOTS), RecursiveIteratorIterator::CHILD_FIRST ); foreach ($iterator as $file) { if ($file->isDir())
{
rmdir($file->getPathname()); } else { unlink($file->getPathname());
}
}

}
}
0

Author Commented:
thanks for help
0

## Featured Post

• 7
• 6
Tackle projects and never again get stuck behind a technical roadblock.