Solved

delete folder/contents based on date

Posted on 2013-05-21
13
293 Views
Last Modified: 2013-05-21
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
Comment
Question by:joomla
  • 7
  • 6
13 Comments
 
LVL 9

Expert Comment

by:TvMpt
ID: 39183663
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.

Open in new window



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);
    }
}

Open in new window

0
 

Author Comment

by:joomla
ID: 39183727
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
 
LVL 9

Expert Comment

by:TvMpt
ID: 39183737
Try to include php_fileinfo.dll as an extension in php.ini
0
 

Author Comment

by:joomla
ID: 39183749
forgive me for not knowing but is this a windows solution ?
0
 
LVL 9

Expert Comment

by:TvMpt
ID: 39183751
Its not about SO. But did you have PHP version 5.3.x ??
0
 
LVL 9

Expert Comment

by:TvMpt
ID: 39183769
This is supported starting with PHP 5.3.
0
3 Use Cases for Connected Systems

Our Dev teams are like yours. They’re continually cranking out code for new features/bugs fixes, testing, deploying, testing some more, responding to production monitoring events and more. It’s complex. So, we thought you’d like to see what’s working for us.

 

Author Comment

by:joomla
ID: 39183843
Sorry
Using 5.2.11
0
 
LVL 9

Expert Comment

by:TvMpt
ID: 39183849
You can try to use only the
new RecursiveIteratorIterator(new RecursiveDirectoryIterator($startpath), RecursiveIteratorIterator::CHILD_FIRST)
0
 

Author Comment

by:joomla
ID: 39183926
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
 
LVL 9

Expert Comment

by:TvMpt
ID: 39183930
Just put a simple if to skip base path...
0
 

Author Comment

by:joomla
ID: 39183959
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
 
LVL 9

Accepted Solution

by:
TvMpt earned 500 total points
ID: 39183976
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());
            }
        }

    }
}

Open in new window

0
 

Author Closing Comment

by:joomla
ID: 39184012
thanks for help
0

Featured Post

3 Use Cases for Connected Systems

Our Dev teams are like yours. They’re continually cranking out code for new features/bugs fixes, testing, deploying, testing some more, responding to production monitoring events and more. It’s complex. So, we thought you’d like to see what’s working for us.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Part of the Global Positioning System A geocode (https://developers.google.com/maps/documentation/geocoding/) is the major subset of a GPS coordinate (http://en.wikipedia.org/wiki/Global_Positioning_System), the other parts being the altitude and t…
Introduction This article is intended for those who are new to PHP error handling (https://www.experts-exchange.com/articles/11769/And-by-the-way-I-am-New-to-PHP.html).  It addresses one of the most common problems that plague beginning PHP develop…
Learn the basics of modules and packages in Python. Every Python file is a module, ending in the suffix: .py: Modules are a collection of functions and variables.: Packages are a collection of modules.: Module functions and variables are accessed us…
In this fifth video of the Xpdf series, we discuss and demonstrate the PDFdetach utility, which is able to list and, more importantly, extract attachments that are embedded in PDF files. It does this via a command line interface, making it suitable …

911 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

23 Experts available now in Live!

Get 1:1 Help Now