Page 1 of 1

deleting files and folders

Posted: Sat Sep 07, 2002 4:14 am
by rainbow
I have some problem with deleting files and folders. I have a script that
deletes the files and folders inside another folder. Here it is:

Code: Select all

<?php
$centre_id = 16;

if(!($result11 = mysql_query("SELECT ct_centre_id, ct_centre_name from ct_centre WHERE ct_centre_id = '$centre_id'", $con)))
{
      Error(sprintf("Internal Error %d:%s\n",mysql_errno(),mysql_error()));
            exit();
}

$row11 = mysql_fetch_array($result11);
$centre_id = $row11ї"ct_centre_id"];
$centre_name = $row11ї"ct_centre_name"];

if(!($result12 = mysql_query("SELECT student_id from ct_centre_coaches WHERE ct_centre_id = '$centre_id'", $con)))
{
                  Error(sprintf("Internal Error %d:%s\n",mysql_errno(),mysql_error()));
                  exit();
}

$num_results = mysql_num_rows($result12);
$count = 0;
$id= 0;
for ($i=0; $i<$num_results; $i++)
{
     $row12 = mysql_fetch_array($result12);
     $coach_id = $row12ї"student_id"];

     if(!($result13 = mysql_query("SELECT ct_cdc_deliv_topic_id from ct_cdc_deliv_topic WHERE ct_centre_id = '$centre_id'", $con)))
     {
          Error(sprintf("Internal Error %d:%s\n",mysql_errno(),mysql_error()));
          exit();
     }
     // Delete entries from deliverable tables.
     while($row13 = mysql_fetch_array($result13))
     {
           $ct_topic_id = $row13ї"ct_cdc_deliv_topic_id"];

           $center_path = "".$cdc_path."/centre".$centre_id."";
           $dir2remove =  "".$cdc_path."/centre".$centre_id."/coach".$coach_id."/topic".$ct_topic_id."/version".$version."/";

           if ($dir = @opendir("$dir2remove"))
           {
               while (($file = readdir($dir)) != false)
               {
                     if (!($file=="." || $file==".."))
                     {
                        chdir($center_path."/coach".$coach_id."/topic".$ct_topic_id."/version".$version."/");
                        unlink($center_path."/coach".$coach_id."/topic".$ct_topic_id."/version".$version."/".$file."");

                        chdir($center_path."/coach".$coach_id."/topic".$ct_topic_id."/");
                        unlink($center_path."/coach".$coach_id."/topic".$ct_topic_id."/".$file."");

                        chdir($center_path."/coach".$coach_id."/");
                        unlink($center_path."/coach".$coach_id."/".$file.""); //   ??

                        chdir($center_path."/");
                        unlink($center_path."/".$file."");  //    ?? 
                     }

               } //close while
               closedir($dir);

               rmdir($center_path."/coach".$coach_id."/topic".$ct_topic_id."/version".$version."/");
               rmdir($center_path."/coach".$coach_id."/topic".$ct_topic_id."/");
               rmdir($center_path."/coach".$coach_id."/"); //        ??
               rmdir($center_path."/"); //      ??
           }
    }

    $stat =  "center has been deleted";
}
?>
So, when i run the script , it actually works and deletes the stuff, but at the same time it gives the following kind of errors:Warning: Unlink failed (No such file or directory) in c:\.....\script.php on line 71

Warning: RmDir failed (Permission denied) in c:\...\script.php on line 79

for lines I marked in the code with "??" sign.
Can someone tell what is the problem ?

Posted: Sat Sep 07, 2002 11:32 am
by Takuma
How about remoivng those code?

Posted: Sat Sep 07, 2002 11:42 am
by gite_ashish
Takuma wrote:How about remoivng those code?
i guess, removing the peice of code does NOT help removing the file/directory... :lol:

ofcourse there will be no error, as ther will be no code ;-)

:!: :?: :!: :?:

Posted: Sat Sep 07, 2002 11:50 am
by Takuma
Sorry, it might be bacuase of this

Code: Select all

thomasj@superusers.dk (05-Jul-2000 09:42)

if you can't unlink a file it might be, that there is no write permission for the DIRECTORY in which the file resides.  Check this out.
And I don't think you need to do chdir();

Posted: Sat Sep 07, 2002 11:53 am
by gite_ashish
hi,

for unlink()/rmdir() php need to have the permissions on the respective files and directories.

u r getting error for the outer files, directories onyl:

Code: Select all

<?php
unlink($center_path."/coach".$coach_id."/".$file."");   //   ?? 
unlink($center_path."/".$file."");  //    ?? 

rmdir($center_path."/coach".$coach_id."/");   //  ?? 
rmdir($center_path."/");   //   ??
?>

try doing from command prompt (change $center_path with actual value):

Code: Select all

chmod -R 777 $center_path

Posted: Sat Sep 07, 2002 11:55 am
by Takuma
Isn't that what I said...
Oh well yours have more details :wink:

Posted: Sat Sep 07, 2002 2:26 pm
by rainbow
Thanx people for replies! :)
I guess i figured out what was the problem. The problem was with while loop. Because actually sometimes it needs to run few times to delete few folders. But it occured so that it ran across empty or none existing folders, because they have been already deleted at first run of loop. And that's why those warnings appeared. Anyways here is a fixed version of code:

Code: Select all

<?phpglobal $centre_id;
$centre_id = 16;

if(!($result11 = mysql_query("SELECT ct_centre_id, ct_centre_name from ct_centre WHERE ct_centre_id = '$centre_id'", $con)))
{
      Error(sprintf("Internal Error %d:%s\n",mysql_errno(),mysql_error()));
            exit();
}

$row11 = mysql_fetch_array($result11);
$centre_id = $row11ї"ct_centre_id"];
$centre_name = $row11ї"ct_centre_name"];

$center_path = "".$cdc_path."/centre".$centre_id."";
chmod($center_path, 0777);

if(!($result12 = mysql_query("SELECT student_id from ct_centre_coaches WHERE ct_centre_id = '$centre_id'", $con)))
{
                  Error(sprintf("Internal Error %d:%s\n",mysql_errno(),mysql_error()));
                  exit();
}

$num_results = mysql_num_rows($result12);
$count = 0;
$id= 0;
for ($i=0; $i<$num_results; $i++)
{
     $row12 = mysql_fetch_array($result12);
     $coach_id = $row12ї"student_id"];

     if(!($result13 = mysql_query("SELECT ct_cdc_deliv_topic_id from ct_cdc_deliv_topic WHERE ct_centre_id = '$centre_id'", $con)))
     {
          Error(sprintf("Internal Error %d:%s\n",mysql_errno(),mysql_error()));
          exit();
     }
     // Delete entries from deliverable tables.
     while($row13 = mysql_fetch_array($result13))
     {
           $ct_topic_id = $row13ї"ct_cdc_deliv_topic_id"];

           // delete topic folders and their contents
           $dir2remove =  "".$cdc_path."/centre".$centre_id."/coach".$coach_id."/topic".$ct_topic_id."/version".$version."/";

           if ($dir = @opendir("$dir2remove"))
           {
               while (($file = readdir($dir)) != false)
               {
                     if (!($file=="." || $file==".."))
                     {
                       // chdir($center_path."/coach".$coach_id."/topic".$ct_topic_id."/version".$version."/");
                        unlink($center_path."/coach".$coach_id."/topic".$ct_topic_id."/version".$version."/".$file."");

                     //   chdir($center_path."/coach".$coach_id."/topic".$ct_topic_id."/");
                        unlink($center_path."/coach".$coach_id."/topic".$ct_topic_id."/".$file."");
                     }

               } //close while
               closedir($dir);

               rmdir($center_path."/coach".$coach_id."/topic".$ct_topic_id."/version".$version."/");

               rmdir($center_path."/coach".$coach_id."/topic".$ct_topic_id."/");
           }
    }
    // delete coach folders and their contents
    $dir2remove =  "".$cdc_path."/centre".$centre_id."/coach".$coach_id."/";

    if ($dir = @opendir("$dir2remove"))
    {
       while (($file = readdir($dir)) != false)
       {
             if (!($file=="." || $file==".."))
             {
                unlink($center_path."/coach".$coach_id."/".$file."");
             }
       } //close while
       closedir($dir);

       rmdir($center_path."/coach".$coach_id."/");
    }


}
// delete centre folder and its contents
$dir2remove =  "".$cdc_path."/centre".$centre_id."/";

if ($dir = @opendir("$dir2remove"))
{
   while (($file = readdir($dir)) != false)
   {
         if (!($file=="." || $file==".."))
         {
            unlink($center_path."/".$file."");
         }
   } //close while
   closedir($dir);

   rmdir($center_path."/");
$stat =  "center has been deleted";
}
echo "Status: $stat";

?>

Posted: Sat Sep 07, 2002 2:29 pm
by Takuma
lol, the good this is that you have found the problem by yorself.

P.S. This also mean that I'm useless :oops:

Posted: Sat Sep 07, 2002 3:14 pm
by rainbow
to Takuma:
This also mean that I'm useless
Don't worry. :lol: Actually the idea about the problem came to my mind after you said , that i don't need to use chdir.
So, you are not useless :D

Posted: Sat Sep 07, 2002 3:29 pm
by Takuma
OK, :D :lol: