lewisstevens1 Posted August 14, 2014 Share Posted August 14, 2014 (edited) Hello i was wondering what the best way to code the following script would be.. i have tried the code in the following box: if(isset($_POST['update_system'])){ $filetype = $_FILES['update_file']['type']; $filename = $_FILES['update_file']['name']; $tempname = $_FILES['update_file']['tmp_name']; $filename_exp = explode('.',$filename); $valext = $filename_exp[1]; $val_explode = explode('_',$filename_exp[0]); $val1 = $val_explode[0]; $val2 = $val_explode[1]; $date = $val_explode[2]; $date_day = substr($date, 6,2); $date_month = substr($date, 4,2); $date_year = substr($date, 0,4); if($filetype == 'application/octet-stream' && $valext == 'rar' && $val1 == 'addable' && $val2 == 'update'){ $prev_location = 'system_updates/previous/'.$filename; $curr_location = 'system_updates/current/'.$filename; $worar = explode('.',$filename); $worar2 = $worar[0]; $output = 'system_updates/current'; $output2 = 'system_updates/previous'; /* EMPTY OLD */ $prescanH = scandir($output2); foreach($prescanH as $preH){ if($preH != '.' && $preH != '..'){ unlink($output2.'/'.$preH); } } /* MOVE CURRENT TO OLD */ $prescan = scandir($output); foreach($prescan as $pre){ if($pre != '.' && $pre != '..'){ system('mv '.$output.'/'.$pre.' '.$output2.'/'.$pre.''); } } $prescana = scandir($output); foreach($prescana as $prea){ if($prea != '.' && $prea != '..'){ unlink($output.'/'.$prea); } } move_uploaded_file($tempname, $curr_location); /* UNPACK RAR & COPY FROM TEMP */ $rar_file = rar_open($curr_location); $list = rar_list($rar_file); foreach($list as $file) { $entry = rar_entry_get($rar_file, $file->getName()); $entry -> extract($output); } rar_close($rar_file); $rrmdir_arr = array('content','example_content'); foreach($rrmdir_arr as $rrmdirs){ rrmdir($rrmdirs); system('mv '.$output.'/'.$worar2.'/'.$rrmdirs.' .'); } } else { $error_message = 'Error Uploading File..'; echo "<script> window.location.href='".$_SERVER['PHP_SELF']."?page=".$_GET['page']."&error=1&error_message=".$error_message."'; </script>"; } } LIBRARY SETUP index.php --- CONTENT --- SYSTEM_UPDATES --- CURRENT --- PREVIOUS What it does is takes the uploaded file - checks its a rar extension. then deletes everything from PREVIOUS and moves rar from CURRENT to PREVIOUS. It then unzips the current into the current directory then removes everything on the base directory except for the SYSTEM_UPDATES folder. Then it moves the files from the folder in the CURRENT DIRECTORY out and replaces onto the root of website. I am not happy about this but scandir still seemed to pick up the files inside the SYSTEM_UPDATES folder: $rrmdir_arr = array('content','example_content'); foreach($rrmdir_arr as $rrmdirs){ rrmdir($rrmdirs); system('mv '.$output.'/'.$worar2.'/'.$rrmdirs.' .'); } The weird thing is.. it works fine first time. As soon as i try to upload another to do the update - it all goes weird, and seems to skip the part where it copies all the files out - yet it stil deletes the directory... or the rar uncompression doesnt work. Thanks Lewis Edited August 15, 2014 by Ch0cu3r fixed code tags Quote Link to comment Share on other sites More sharing options...
ginerjm Posted August 14, 2014 Share Posted August 14, 2014 Since you have an invalid function call here (rrmdir) I'm guessing that you didn't bother to turn on php error checking. Do So Now. See what other errors you may have. You could also review this and perhaps shorten it up a bit. For example - why do you explode $filename twice? Why do you not assign the path names up front and use them in place of literal paths being used twice? Quote Link to comment Share on other sites More sharing options...
lewisstevens1 Posted August 15, 2014 Author Share Posted August 15, 2014 nce you have an invalid function call here (rrmdir) I'm guessing that you didn't bother to turn on php error checking. Do So Now. See what other errors you may have. Forgot to include this function in the post: function rrmdir($dir) { if (is_dir($dir)) { $objects = scandir($dir); foreach ($objects as $object) { if ($object != "." && $object != "..") { if (filetype($dir."/".$object) == "dir") rrmdir($dir."/".$object); else unlink($dir."/".$object); } } reset($objects); rmdir($dir); } } Although i just get error like: [14-Aug-2014 21:12:37 UTC] PHP Warning: unlink(system_updates/previous/addable_update_20140813): Is a directory in /home/addable/public_html/system/content/page_content/admin/admin_system_update.php on line 28 - Even though it worked fine the first time... Quote Link to comment Share on other sites More sharing options...
lewisstevens1 Posted August 15, 2014 Author Share Posted August 15, 2014 (edited) I tidied it up abit: if(isset($_POST['update_system'])){ $filetype = $_FILES['update_file']['type']; $filename = $_FILES['update_file']['name']; $tempname = $_FILES['update_file']['tmp_name']; $filename_exp = explode('.',$filename); $filename2 = $filename_exp[0]; $valext = $filename_exp[1]; $val_explode = explode('_',$filename_exp[0]); $val1 = $val_explode[0]; $val2 = $val_explode[1]; if($filetype == 'application/octet-stream' && $valext == 'rar' && $val1 == 'addable' && $val2 == 'update'){ $output = 'system_updates/current'; $output2 = 'system_updates/previous'; /* EMPTY OLD */ $prescanH = scandir($output2); foreach($prescanH as $preH){ if($preH != '.' && $preH != '..'){ unlink($output2.'/'.$preH); } } /* MOVE CURRENT TO OLD */ $prescan = scandir($output); foreach($prescan as $pre){ if($pre != '.' && $pre != '..'){ system('mv '.$output.'/'.$pre.' '.$output2.'/'.$pre.''); unlink($output.'/'.$prea); } } /* MOVE FROM TEMP */ move_uploaded_file($tempname, $output.'/'.$filename); /* UNPACK RAR & COPY FROM TEMP */ $rar_file = rar_open($output.'/'.$filename); $list = rar_list($rar_file); foreach($list as $file) { $entry = rar_entry_get($rar_file, $file->getName()); $entry -> extract($output); } rar_close($rar_file); $rrmdir_arr = array('content','example_content'); foreach($rrmdir_arr as $rrmdirs){ rrmdir($rrmdirs); system('mv '.$output.'/'.$filename2.'/'.$rrmdirs.' .'); } } else { $error_message = 'Error Uploading File..'; echo "<script> window.location.href='".$_SERVER['PHP_SELF']."?page=".$_GET['page']."&error=1&error_message=".$error_message."'; </script>"; } } Edited August 15, 2014 by lewisstevens1 Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.