As a contributor of Webmasters-fr.net couldn’t make his recursive FTP rm work, I began to look at the examples provided in the PHP manual… I couldn’t make them work either.

That’s why I ended up rewriting the ftp_rmAll, and it now works fine on my FTP server. I still have to play around to make sure it does work in any situation, but here is the code:


function ftp_rmAll($conn_id,$dst_dir){
    if (!@ftp_chdir($conn_id, $dst_dir)) {
       die(“Couldn’t change directoryn”);
    }
   $ar_files = ftp_nlist($conn_id, “”);
   if (is_array($ar_files)){ // makes sure there are files
       for ($i=0;$i < sizeof($ar_files);$i++){ // for each file
           $st_file = $ar_files[$i];
           // don’t care about . and ..
           if ($st_file != ‘.’ && $st_file != ‘..’)
             // check if it is a directory
           if (ftp_size($conn_id, $st_file) == -1){
               ftp_rmAll($conn_id, $st_file); // if so, use recursion
           } else {
               ftp_delete($conn_id, $st_file); // if not, delete the file
           }
       }
   }

   ftp_rmdir($conn_id, $dst_dir); // delete empty directories
}

    $conn_id      = ftp_connect($ftp_server);

$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);

    ftp_rmAll($conn_id, “/repertoire”);