1. Dashboard
  2. Forum
    1. Unerledigte Themen
  3. Downloads
  4. Galerie
    1. Alben
  5. Toolbox
    1. Passwort Generator
    2. Portchecker
  6. Mitglieder
    1. Mitgliedersuche
    2. Benutzer online
    3. Trophäen
    4. Team
Di: 20 Mai 2025
  • Anmelden oder registrieren
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Artikel
  • Forum
  • Dateien
  • Seiten
  • Bilder
  • Erweiterte Suche

Schön, dass du den Weg zu NodeZone.net gefunden hast! Aktuell bist du nicht angemeldet und kannst deshalb nur eingeschränkt auf unsere Community zugreifen. Um alle Funktionen freizuschalten, spannende Inhalte zu entdecken und dich aktiv einzubringen, registriere dich jetzt kostenlos oder melde dich mit deinem Account an.

Anmelden oder registrieren
    1. Nodezone.net Community
    2. Forum
    3. Entwicklung & Scripting
    4. Webentwicklung
    5. HTML, CSS, PHP, JS

    PHP Download mit Subdirectorys

    • Jam Morgenstern
    • 4. Mai 2019 um 02:12
    • Jam Morgenstern
      Schüler
      Reaktionen
      52
      Trophäen
      9
      Beiträge
      114
      • 4. Mai 2019 um 02:12
      • #1

      Servus,

      ich bin gerade ein bisschen am rum testen mit dem MultiGamingLauncher von MrDarkSkil. Ich bin nun auf folgende Hürde gestoßen:

      Der Download funktioniert nur für einen Ordner und nicht dessen Unterordner. Vllt weiß jemand von euch eine Lösung, ich komme gerade nicht drauf;(.

      PHP: Code
      header('Content-type: application/json');
      
      $result = array("status" => 500, "message" => "Internal error");
      
      if (isset($_POST['token']) && isset($_POST['id']))
      {
          $id = $_POST['id'];
          $token = $_POST['token'];
      
          $checkUser = $database->prepare('SELECT user_id FROM sessions WHERE token = :token');
          $checkUser->execute(array('token' => $token));
          $res = $checkUser->fetch();
          if ($checkUser->rowCount() != 0 && $userLevel = $database->prepare('SELECT `level`,`banned` FROM users WHERE id = :id')) {
              $userLevel->execute(array('id' => $res['user_id']));
              $myID = $res['user_id'];
              $res = $userLevel->fetch();
              if ($userLevel->rowCount() != 0 && (int)$res['level'] >= 7 && (int)$res['banned'] != 1) {
                  $getSettings = $database->prepare('SELECT * FROM `servers` WHERE id = :id');
                  $getSettings->execute(array('id' => $id));
                  if ($getSettings->rowCount()) {
                      $res = $getSettings->fetch();
      
                      $addons_directory = $res['local_path'] . '/modpack/';
                      $cpps_directory = $res['local_path'] . '/modpack/';
                      $userconfigs_directory = $res['local_path'];
                      if ($handle_addons = opendir($addons_directory)) {
                          $Addons = array();
                          $Cpps = array();
                          $Userconfigs = array();
                          $i = 0;
                          $addons = array();
                          $cpps = array();
                          $userconfigs = array();
                          $handle_cpps = opendir($cpps_directory);
                          $handle_userconfigs = opendir($userconfigs_directory);
                          /* Listing des mods */
                          while (false !== ($entry = readdir($handle_addons))) {
                              if ($entry != '.' && $entry != '..' && is_file($addons_directory . '/' . $entry)) {
                                  $Addons['mod' . $i]['md5'] = md5_file($addons_directory . '/' . $entry);
                                  $Addons['mod' . $i]['name'] = $entry;
                                  $Addons['mod' . $i]['size'] = filesize($addons_directory . '/' . $entry);
                                  $i++;
                              }
                          }
                          while (false !== ($entry = readdir($handle_cpps))) {
                              if ($entry != '.' && $entry != '..' && is_file($cpps_directory . '/' . $entry)) {
                                  $Cpps['cpp' . $i]['md5'] = md5_file($cpps_directory . '/' . $entry);
                                  $Cpps['cpp' . $i]['name'] = $entry;
                                  $Cpps['cpp' . $i]['size'] = filesize($cpps_directory . '/' . $entry);
                                  $i++;
                              }
                          }
                          while (false !== ($entry = readdir($handle_userconfigs))) {
                              if ($entry != '.' && $entry != '..' && is_file($userconfigs_directory . '/' . $entry)) {
                                  $Userconfigs['userconfig' . $i]['md5'] = md5_file($userconfigs_directory . '/' . $entry);
                                  $Userconfigs['userconfig' . $i]['name'] = $entry;
                                  $Userconfigs['userconfig' . $i]['size'] = filesize($userconfigs_directory . '/' . $entry);
                                  $Userconfigs['userconfig' . $i]['type'] = 0;
                                  $i++;
                              }
                          }
                          closedir($handle_addons);
                          closedir($handle_userconfigs);
                          closedir($handle_cpps);
                          foreach ($Addons as $Addon) {
                              array_push($addons, $Addon);
                          }
                          
                          //print_r($addons);
                          
                          foreach ($Cpps as $Cpp) {
                              array_push($cpps, $Cpp);
                          }
                          foreach ($Userconfigs as $Userconfig) {
                              array_push($userconfigs, $Userconfig);
                          }
      
                          $userconfigs_dir = $res['local_path'] . "/userconfig";
                          function get_filelist_as_array($dir, $recursive = true, $basedir = '')
                          {
                              if ($dir == '') {
                                  return array();
                              } else {
                                  $results = array();
                                  $subresults = array();
                              }
                              if (!is_dir($dir)) {
                                  $dir = dirname($dir);
                              } // so a files path can be sent
                              if ($basedir == '') {
                                  $basedir = realpath($dir) . DIRECTORY_SEPARATOR;
                              }
      
                              $files = scandir($dir);
                              foreach ($files as $key => $value) {
                                  if (($value != '.') && ($value != '..')) {
                                      $path = realpath($dir . DIRECTORY_SEPARATOR . $value);
                                      if (is_dir($path)) { // do not combine with the next line or..
                                          if ($recursive) { // ..non-recursive list will include subdirs
                                              $subdirresults = get_filelist_as_array($path, $recursive, $basedir);
                                              $results = array_merge($results, $subdirresults);
                                          }
                                      } else { // strip basedir and add to subarray to separate file list
                                          $subresults[] = str_replace($basedir, '', $path);
                                      }
                                  }
                              }
                              // merge the subarray to give the list of files then subdirectory files
                              if (count($subresults) > 0) {
                                  $results = array_merge($subresults, $results);
                              }
                              return $results;
                          }
      
                          $files = get_filelist_as_array($userconfigs_dir);
                          $result2['total'] = count($files);
                          $i = 0;
                          $y = count($userconfigs);
                          while ($i < $result2['total']) {
                              $userconfigs[$y]['name'] = $files[$i];
                              $userconfigs[$y]['size'] = filesize($userconfigs_dir . '/' . $files[$i]);
                              $userconfigs[$y]['md5'] = md5_file($userconfigs_dir. '/' . $files[$i]);
                              $userconfigs[$y]['type'] = 1;
                              $i++;
                              $y++;
                          }
      
                          $result['status'] = 42;
                          $result['message'] = "Update created";
                          $result['total_addons'] = count($addons);
                          $result['total_cpps'] = count($cpps);
                          $result['total_userconfigs'] = count($userconfigs);
                          $result['addons'] = $addons;
                          $result['cpps'] = $cpps;
                          $result['userconfigs'] = $userconfigs;
      
      
                          if (!$fp = fopen($userconfigs_directory . '/'. $id .'.json', 'w+'))
                          {
                              $result['status'] = 505;
                              $result['message'] = "Can't open " .  $userconfigs_directory . '/list.json';
                          }
                          if (!fwrite($fp, json_encode($result)))
                          {
                              $result['status'] = 504;
                              $result['message'] = "Can't write " .  $userconfigs_directory . '/list.json';
                          }
                          
                          if ($result['status'] == 42)
                          {
                              $insertToken = $database->prepare('UPDATE servers SET vmod=:vmod WHERE id = :id');
                              $vmod = (int)$res['vmod'] += 1;
                              $insertToken->execute(array('vmod' => $vmod, 'id' => $id));
                          }
                          fclose($fp);
                      }
                  }
                  else
                  {
                      $result["status"] = 44;
                      $result["message"] = "Server not found";
                  }
      
              }
              else
              {
                  $result['status'] = 44;
                  $result['message'] = "You don't have right to create this request !";
              }
          }
          else
          {
              $result['status'] = 41;
              $result['message'] = "Token invalid";
          }
      }
      else
      {
          $result["status"] = 404;
          $result["message"] = "Arguments missing.";
      }
      
      
      echo json_encode($result);
      Alles anzeigen

      Danke schon mal:P

    • BlueType
      Nerd
      Reaktionen
      190
      Trophäen
      8
      Beiträge
      735
      Bilder
      27
      • 4. Mai 2019 um 11:41
      • #2

      Main programm drauf ansetzten das es mehrere Ordner downloaded. Nicht an php rum wursteln sondern einfach im Programm nen neuen Pfad anlegen. Hab ich auch so gemacht

      MFG ƁLƱΣƬΨƤΣ™

      :!:Hinweis:!:

      :!:Ich bin zwar erfahren mit der Sprache SQF, lerne trotzdem noch, definitiv kein Profi:!:

      Discord : ╲⎝⧹⎝ƁLƱΣƬΨƤΣ™⎠⧸⎠╱#0448

      Discord Server : https://discord.gg/K8KhAnE

      Teamspeak : ts.Endless-Net.de

    • Jam Morgenstern
      Schüler
      Reaktionen
      52
      Trophäen
      9
      Beiträge
      114
      • 4. Mai 2019 um 13:58
      • #3

      Der Server sollte für die Order ja schon auch hash werte generieren und der erkennt diese aktuell ja gar nicht

    • Multivitamin
      aka Saft
      Reaktionen
      201
      Trophäen
      11
      Beiträge
      352
      • 4. Mai 2019 um 15:57
      • #4

      Bin zwar schon ein paar Jahre aus PHP raus aber soweit ich das sehen kann fragst du hier ab ob es ein file ist und fügst nur dann das zu deiner $addons hinzu

      Zitat von Jam Morgenstern

      while (false !== ($entry = readdir($handle_addons))) {
      if ($entry != '.' && $entry != '..' && is_file($addons_directory . '/' . $entry)) {
      $Addons['mod' . $i]['md5'] = md5_file($addons_directory . '/' . $entry);
      $Addons['mod' . $i]['name'] = $entry;
      $Addons['mod' . $i]['size'] = filesize($addons_directory . '/' . $entry);
      $i++;
      }
      }

      Alles anzeigen

      du musst das natürlich recursive aufrufen, hier habe ich mich mal getraut etwas zu schreiben:

      PHP
      function readDirRecursive($dir, $count = 0, $toplevel = true) {
          $resource = opendir($dir);
          $result = [];
          while (false !== ($entry = readdir($resource))) {
            if ($entry == "." || $entry == "..") continue;
            $path = $dir."/".$entry;
            $index = "mod".$count;
            if (is_file($path)) {
              $result[$index]["md5"] = md5_file($path);
              $result[$index]["name"] = $entry;
              $result[$index]["path"] = $dir;
              $result[$index]["size"] = filesize($path);
              $count++;
            } else if (is_dir($path)) {
              $res = readDirRecursive($path, $count, false);
              $count = $res["count"];
              $result = array_merge($result, $res["result"]);
            }
          }
          if ($toplevel) {
            return $result;
          } else {
            return array("result" => $result, "count" => $count);
          }
        }
      
        print_r(readDirRecursive("./files"));
      Alles anzeigen

      die funktion liest dir die ordner rekursiv und gibt ein array zurück mit keys =>

      md5 - md5file()

      name - filename

      path - ordner pfad

      size - filesize()

    • nox 11. Mai 2025 um 17:52

      Hat das Thema aus dem Forum PHP nach HTML, CSS, PHP, JS verschoben.

    Registrieren oder Einloggen

    Du bist noch kein Mitglied von NodeZone.net? Registriere dich kostenlos und werde Teil einer großartigen Community!

    Registrieren

    Wichtige Links & Informationen

    Server & Hosting-Ressourcen

      Server Administration & Hosting Basics

      Windows Server Support & Guides

      Linux Server Configuration & Help

      Setting up TeamSpeak 3 & VoIP Servers

      Domains & Web Hosting for Beginners & Professionals

      Cloud Hosting, Docker & Kubernetes Tutorials

    Gameserver & Modding-Ressourcen

      ArmA 3 Tutorials & Script Collection

      Renting & Operating Gameservers

      DayZ Server Management & Help

      FiveM (GTA V) Server & Script Development

      Rust Server Modding & Administration

      Setting up & Optimizing ARK Survival Servers

    NodeZone.net – Deine Community für Gameserver, Server-Hosting & Modding

      NodeZone.net ist dein Forum für Gameserver-Hosting, Rootserver, vServer, Webhosting und Modding. Seit 2015 bietet unsere Community eine zentrale Anlaufstelle für Server-Admins, Gamer und Technikbegeisterte, die sich über Server-Management, Hosting-Lösungen und Spielemodding austauschen möchten.


      Ob Anleitungen für eigene Gameserver, Hilfe bei Root- und vServer-Konfigurationen oder Tipps zu Modding & Scripting – bei uns findest du fundiertes Wissen und praxisnahe Tutorials. Mit einer stetig wachsenden Community findest du hier Antworten auf deine Fragen, Projektpartner und Gleichgesinnte für deine Gaming- und Serverprojekte. Schließe dich NodeZone.net an und werde Teil einer aktiven Community rund um Server-Hosting, Gameserver-Management und Modding-Ressourcen.

    Wer jetzt nicht teilt ist selber Schuld:
    1. Nutzungsbestimmungen
    2. Datenschutzerklärung
    3. Impressum
    4. Urheberrechts- oder Lizenzverstoß melden
  • Trimax Design coded & layout by Gino Zantarelli 2023-2025©
    Community-Software: WoltLab Suite™