Hello and welcome to our community! Is this your first visit?
Register
Enjoy an ad free experience by logging in. Not a member yet? Register.
Results 1 to 6 of 6
  1. #1
    New Coder
    Join Date
    Jun 2007
    Posts
    60
    Thanks
    3
    Thanked 0 Times in 0 Posts

    Recursive Remove Question

    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:
    PHP Code:
    // ------------ 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;
         }
     }
     
    // ------------------------------------------------------------ 

  • #2
    Regular Coder
    Join Date
    Sep 2006
    Location
    Vermont, USA
    Posts
    154
    Thanks
    0
    Thanked 6 Times in 6 Posts
    Active PHP/MySQL application developer available for immediate work.
    syosoft.com mavieo.com - Remote Web Site Administration Suite - Reseller Ready

  • #3
    New Coder
    Join Date
    Jun 2007
    Posts
    60
    Thanks
    3
    Thanked 0 Times in 0 Posts
    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
    PHP Code:
    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?
    Last edited by elementis0; 05-16-2008 at 04:24 PM.

  • #4
    Super Moderator Inigoesdr's Avatar
    Join Date
    Mar 2007
    Location
    Florida, USA
    Posts
    3,642
    Thanks
    2
    Thanked 405 Times in 397 Posts
    A function can call itself recursively. Do you have some example code to show?

  • #5
    Regular Coder
    Join Date
    Sep 2006
    Location
    Vermont, USA
    Posts
    154
    Thanks
    0
    Thanked 6 Times in 6 Posts
    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

    PHP Code:
    echo 'hi';
    exit; 
    If your script dies with "Hi", then you are correctly including the functions file, and something mysterious is happening.
    Active PHP/MySQL application developer available for immediate work.
    syosoft.com mavieo.com - Remote Web Site Administration Suite - Reseller Ready

  • #6
    New Coder
    Join Date
    Jun 2007
    Posts
    60
    Thanks
    3
    Thanked 0 Times in 0 Posts
    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

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


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


  •  

    Posting Permissions

    • You may not post new threads
    • You may not post replies
    • You may not post attachments
    • You may not edit your posts
    •