From xx2, 1 Week ago, written in Plain Text.
  1. #!/usr/bin/env php
  2. <?php
  3.  
  4.  
  5. if ($argc<2){
  6.         echo "ERROR ARGC";
  7.         die;
  8. }
  9. $check_with_md5=true;
  10. $check_md5_under_size=50000000000;
  11. $listfile="/home/x/SPECIAL_COPY_COMMAND_COPY_LIST.txt";
  12. $basedir="";
  13.  
  14.  
  15. //##################################################################################################################################################
  16. if ($argv[1]=="copy"){
  17.         echo "SPECIAL_COPY_COMMAND \n";
  18.         echo "PREPARING LIST";
  19.  
  20.         if (file_exists($listfile)) unlink($listfile);
  21.         touch($listfile);
  22.        
  23.         $addedc=-1;
  24.        
  25.         echo "\n";
  26.        
  27.         if (!is_dir($argv[count($argv)-1])) die("error last arg not dir");
  28.        
  29.         $basedir=$argv[count($argv)-1];
  30.        
  31.         $fp=fopen($listfile,"w");
  32.         for ($a=2;$a<count($argv);$a++){  //first arg is basedir
  33.                 $string=$argv[$a];
  34.                 echo $string;
  35.                 echo "\n";
  36.                 $addedc++;
  37.                 $r=fwrite($fp,$string."\n");
  38.                 if ($r==false) {echo "ERROR1!!"; sleep(2); die ; }
  39.                
  40.         }
  41.         fclose($fp);
  42.        
  43.         echo "basedir=$basedir\n";
  44.         echo "DONE\n\n";
  45.         echo "added $addedc file(s)/dir(s)";
  46. }
  47. //##################################################################################################################################################
  48. else if ($argv[1]=="paste"){
  49.         global $complete_file_list;
  50.         echo "PASTE MODE\n\n";
  51.        
  52.        
  53. if ($argc<3){
  54.         echo "ERROR ARGC";
  55.         sleep(1);
  56.         die;
  57. }
  58.  
  59.  
  60.         $destination=$argv[2];
  61.         $filecontents=file_get_contents($listfile);
  62.         $filecontents=trim($filecontents);
  63.         $files=explode("\n",$filecontents);
  64.        
  65.         $complete_file_list=array();
  66.  
  67.         $linecount=count($files);
  68.         echo $linecount." in list\n\n";
  69.        
  70.         $lastline=$files[$linecount-1];
  71.  
  72.         if (!is_dir($lastline)){
  73.                 echo "last line [$lastline] is not dir\n";
  74.                 sleep(3);
  75.                 die;
  76.         }
  77.  
  78.         $basedir=$lastline;
  79.         echo "basedir=$basedir\n";
  80.  
  81.  
  82.         for ($a=0;$a<count($files)-1;$a++){
  83.                 $filename=$files[$a];
  84.                 $filename=str_replace("\ "," ",$filename);
  85.                 if (is_dir($filename)){
  86.                         scandir_rec($filename);
  87.                 }
  88.                 else if (is_file($filename)){
  89.                        
  90.                         $f2=substr($filename,strlen($basedir));
  91.                         $complete_file_list[]=$f2;
  92.                 }
  93.                 echo "\n";
  94.         }
  95.  
  96.         echo "complete list:\n";
  97.         print_r($complete_file_list);
  98.         sleep(1);
  99.  
  100.         echo "************\n\n";
  101.  
  102.         for ($a=0;$a<count($complete_file_list);$a++){
  103.                 $filename=$complete_file_list[$a];
  104.  
  105.                 //$f_dest=substr($filename,strrpos($filename,"/"));
  106.                 $f_dest=$destination.$filename;
  107.                
  108.                 echo ($a+1)." ";
  109.                 copy_file($filename,$f_dest);
  110.                
  111.                 if (!file_exists($f_dest)){
  112.                         echo "error file does not exist $f_dest\n\n";
  113.                         sleep(5);
  114.                         die;
  115.                 }
  116.                 else {
  117.                         echo "file exists [$f_dest]\n\n";
  118.                 }
  119.                 echo "\n";
  120.                
  121.         }
  122.        
  123.         echo "\nDONE\n";
  124.        
  125. }
  126. else {
  127.         echo "incorrect arguments arg1:copy/paste arg2: filelist/dest";
  128. }
  129. //##################################################################################################################################################
  130. echo "\n------------\n";
  131. sleep(444);
  132.  
  133. function scandir_rec($dir,$subdir="."){
  134.         global $complete_file_list,$basedir;
  135.         $filelist=scandir($dir);
  136.         //print_r($filelist);
  137.         foreach($filelist as $file){
  138.                 if ($file==".." || $file==".") continue;
  139.                
  140.                 $f2=$dir."/".$file;
  141.                 if (is_dir($f2)){
  142.                         echo "recursive\n";
  143.                         scandir_rec($f2,$dir);
  144.                 }
  145.                 if (is_file($f2)){
  146.                         //echo "adding $f2\n";
  147.                         $p=stripos($f2,$basedir);
  148.                         if ($p==0){
  149.                                 $f2=substr($f2,strlen($basedir));
  150.                                 $complete_file_list[]=$f2;
  151.                                 echo "added $f2\n";
  152.                         }
  153.                 }
  154.         }
  155. }
  156.  
  157.  
  158.  
  159. function copy_file($source,$destination){
  160.         global $basedir;
  161.         global $check_with_md5;
  162.         global $check_md5_under_size;
  163.        
  164.        
  165.         $resume_if_destination_exists=1;
  166.        
  167.         $resume=0;
  168.  
  169.         $dir=substr($destination,0,strrpos($destination,"/"));
  170.         if (!is_dir($dir)){
  171.                 $r=@mkdir($dir);
  172.                 if ($r==false){ echo "cannot mkdir [$dir] $f2\n"; return;}
  173.                 else
  174.                 echo "created dir $dir\n";
  175.         }
  176.  
  177.         $source_full_path=$basedir."/".$source;
  178.        
  179.         echo "\nf1:\t$source_full_path\nf2:\t$destination\n";
  180.         $f1=$source;
  181.         $f2=$destination;
  182.  
  183.        
  184.         $destination_exists=file_exists($destination);
  185.        
  186.         $start_copying_from=0;
  187.         $source_size=filesize($source_full_path);
  188.        
  189.         if ($destination_exists){
  190.                 $destination_size=filesize($destination);
  191.  
  192.                 if ($source_size==$destination_size){
  193.                         echo "same filesize\n";
  194.                         if ($check_with_md5){
  195.                                 if ($source_size<$check_md5_under_size){
  196.                                         $md51=md5_file($source_full_path);
  197.                                         $md52=md5_file($destination);
  198.                                        
  199.                                         if ($md51==$md52){
  200.                                                 echo "file is same, skipping (md5: $md51)\n";
  201.                                                 return;
  202.                                         }
  203.                                         else {
  204.                                                 echo "same size but different files\n";
  205.                                                 echo "undefined action\n";
  206.                                                 sleep(20);
  207.                                                 die;
  208.                                         }      
  209.                                 }
  210.                         }
  211.                 }
  212.                 else if ($destination_size==0){
  213.                         echo "destination size: $destination_size\n";
  214.                 }
  215.                 else if ($source_size>$destination_size){
  216.                         echo "source is larger\n";
  217.                         echo "destination size: $destination_size\n";
  218.                         echo "     source size: $source_size\n";
  219.                        
  220.                         if ($resume_if_destination_exists && $check_with_md5){
  221.                                 if ($source_size<$check_md5_under_size){
  222.                                         $md51=md5(file_get_contents($source_full_path,FALSE,NULL,0,$destination_size-70));
  223.                                         $md52=md5(file_get_contents($destination,         FALSE,NULL,0,$destination_size-70));
  224.                                        
  225.                                         if ($md51==$md52){
  226.                                                 echo "first $destination_size of f2 is same with f1, resuming ($md51)\n";
  227.                                                 sleep(3);
  228.                                                 $start_copying_from=$destination_size-70;
  229.                                                 $resume=1;
  230.                                         }
  231.                                         else {
  232.                                                 echo "different files\n";
  233.                                                 echo "md51: $md51 \nmd52: $md52\n";
  234.                                                 echo "undefined action\n";
  235.                                                 sleep(20);
  236.                                                 die;
  237.                                         }
  238.                                        
  239.                                 }
  240.                                 else {
  241.                                         echo "undefined action file size under check_md5_under_size\n";
  242.                                         sleep(20);
  243.                                         die;
  244.                                 }
  245.                         }
  246.                         else {
  247.                                 echo "should not continue, check with md5==0 or resume_if_destination_exists ==0, undefined action\n";
  248.                                 sleep(20);
  249.                                 die;
  250.                         }
  251.                 }
  252.                 else if ($source_size<$destination_size){
  253.                         echo "destination is larger\n";
  254.                         echo "destination: $destination_size\n";
  255.                         echo "     source: $source_size\n";
  256.                         echo "undefined action\n";
  257.                         sleep(20);
  258.                         die;
  259.                 }
  260.         }
  261.  
  262.         $source_full_path=str_replace("//","/",$source_full_path);
  263.  
  264.         $fp1=fopen($source_full_path,"rb");
  265.         $fp2=fopen($destination,"wb");
  266.        
  267.         //echo "\n";
  268.        
  269.         if ($fp1 ==false) { echo "\nerror fopening 1 $source_full_path\n"; sleep(1); }
  270.         if ($fp2 ==false) { echo "\nerror fopening 2 $destination\n"; sleep(1); }
  271.        
  272.  
  273.         if ($resume){
  274.                 echo "resuming\n";
  275.                 $r1=$r2=0;
  276.  
  277.                 $r1=fseek($fp1,$start_copying_from);
  278.                 $r2=fseek($fp2,$start_copying_from);
  279.        
  280.                 if ($r1 !=0) { echo "\nerror fseeking 1 $source_full_path\n"; sleep(5); die;}
  281.                 if ($r2 !=0) { echo "\nerror fseeking 2 $destination\n"; sleep(5); die;}
  282.         }
  283.        
  284.         $a = (float) 0;
  285.         $tot=$source_size;
  286.         $written=0;
  287.         while(1) {
  288.                 $read=fread($fp1, 65536);
  289.                 if ($read==false) break;
  290.                 $res=fwrite($fp2, $read);
  291.                 $written+=$res;
  292.                 if($written%5==0) echo "\rcopying: $written / $tot";
  293.         }
  294.         echo "\rcopied $written / $tot           ";
  295.         echo "\n";
  296.  
  297.  
  298. }
  299.  
  300.  
  301.  
  302. sleep(15);
  303. ?>
  304.  
captcha