...

View Full Version : Recursive Remove Question



elementis0
05-16-2008, 03:35 AM
Hello guys, I am having problem using this recursive remove directory script I copid and pasted.
Everytime I try to run it to delete a directory when there are subfiles in the folder php returns the
Fatal call to undefined function error

Im guessing the problem is because the function calls itself within itself for when there are subfiles so it returns undefined since the function is not tottally defined when running it?
Thats just my theory but how could I fix it so this does recursively remove everything and not get the fatal call to undefined function error.

Heres the code im using:


// ------------ lixlpixel recursive PHP functions -------------
// recursive_remove_directory( directory to delete, empty )
// expects path to directory and optional TRUE / FALSE to empty
// of course PHP has to have the rights to delete the directory
// you specify and all files and folders inside the directory
// ------------------------------------------------------------

// to use this function to totally remove a directory, write:
// recursive_remove_directory('path/to/directory/to/delete');

// to use this function to empty a directory, write:
// recursive_remove_directory('path/to/full_directory',TRUE);

function recursive_remove_directory($directory, $empty=FALSE)
{
// if the path has a slash at the end we remove it here
if(substr($directory,-1) == '/')
{
$directory = substr($directory,0,-1);
}

// if the path is not valid or is not a directory ...
if(!file_exists($directory) || !is_dir($directory))
{
// ... we return false and exit the function
return FALSE;

// ... if the path is not readable
}elseif(!is_readable($directory))
{
// ... we return false and exit the function
return FALSE;

// ... else if the path is readable
}else{

// we open the directory
$handle = opendir($directory);

// and scan through the items inside
while (FALSE !== ($item = readdir($handle)))
{
// if the filepointer is not the current directory
// or the parent directory
if($item != '.' && $item != '..')
{
// we build the new path to delete
$path = $directory.'/'.$item;

// if the new path is a directory
if(is_dir($path))
{
// we call this function with the new path
recursive_remove_directory($path); //<---- THIS IS WHERE ITS MESSING UP
// if the new path is a file
}else{
// we remove the file
unlink($path);
}
}
}
// close the directory
closedir($handle);

// if the option to empty is not set to true
if($empty == FALSE)
{
// try to delete the now empty directory
if(!rmdir($directory))
{
// return false if not possible
return FALSE;
}
}
// return success
return TRUE;
}
}
// ------------------------------------------------------------

syosoft
05-16-2008, 07:41 AM
Never under estimate the manual.

http://us.php.net/manual/en/function.rmdir.php#83126
http://us.php.net/manual/en/function.rmdir.php#82764

elementis0
05-16-2008, 04:12 PM
Yeah, I've taken a look at the manual before too, all those functions to recursively delete the directory all use the function within the function which my PHP is not recognizing
like when it does


function rm_dir($file)
{
//blah blah blah
rm_dir($path);
}

PHP will return that function rm_dir is not recognized

Im wondering why PHP is giving me an error when those functions are supposed to work.
So does anybody know why its doing that, and what I can do to fix it?

Inigoesdr
05-16-2008, 06:35 PM
A function can call itself recursively. Do you have some example code to show?

syosoft
05-16-2008, 07:36 PM
If you're getting a function undefined error, it would be at the point where you attempt to first call the function.

Recursion works because the function is registered with PHP... then it calls its self, which it can, because the function is registered - semi-recursive sentence :).

Here's a little test.

In your functions file, put



echo 'hi';
exit;


If your script dies with "Hi", then you are correctly including the functions file, and something mysterious is happening.

elementis0
05-17-2008, 12:02 AM
Thanks everybody for all your help, but I finally figured it out myself and it was a stupid flaw that I feel dumb for not knowing earlier.

I was using this recursive function inside a class, so when i copied and pasted it i forgot I had to change how I called the function.
so in the function i just put



class thisclass
{
function myFunction
{
//blah blah
$this->myFunction();
}

}


and it all worked.
Sorry for your troubles, but thanks anyways.



EZ Archive Ads Plugin for vBulletin Copyright 2006 Computer Help Forum