Ankündigung

Einklappen
Keine Ankündigung bisher.

Dateien aus Kopiervorgang ausschließen

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Dateien aus Kopiervorgang ausschließen

    Hallo zusammen,
    ich habe folgende funktion die dateien aus einem Verzeichnis in ein anderes kopiert.
    PHP-Code:
    function copyDir($sSourcePath$sTargetPath)
    {
        if (
    is_dir($sSourcePath))
        {
            
    mkdir($sTargetPath0755);
            foreach (
    $oIterator = new \RecursiveIteratorIterator(
                    new \
    RecursiveDirectoryIterator($sSourcePath, \RecursiveDirectoryIterator::SKIP_DOTS),
                    \
    RecursiveIteratorIterator::SELF_FIRST) as $oItem)
            {
                if (
    $oItem->isDir())
                    {

                        
    mkdir($sTargetPath.DIRECTORY_SEPARATOR.$oIterator->getSubPathName());
                    }
                else
                    {
                        
    copy($oItem$sTargetPath.DIRECTORY_SEPARATOR.$oIterator->getSubPathName());
                    }
            }

            return 
    true;
        }
        return 
    false;

    Jetzt möchte ich aber verschiedene Dateien und verzeichnisse ausschließen die nicht überschrieben werden sollen.
    Hat einer einen Lösungsansatz?
    VG
    Sebastian


  • #2
    1. Array mit auszuschließenden Elementen definieren
    2. in_array() verwenden
    Competence-Center -> Enjoy the Informatrix
    PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

    Kommentar


    • #3
      Danke hatte garnicht daran gedacht
      Hier nochmal für alle die das gleiche problem haben die functionierende Lösung:
      PHP-Code:
      function copyDir($sSourcePath$sTargetPath)
      {
      //Eure Dateien die ausgeschlossen werden sollen
          
      $ignored = [
              
      'Config.php',
              
      'updates.php',
              
      'updateAjax.php'
          
      ];
          if (
      is_dir($sSourcePath))
          {
              
      mkdir($sTargetPath0755);
              foreach (
      $oIterator = new \RecursiveIteratorIterator(
                      new \
      RecursiveDirectoryIterator($sSourcePath, \RecursiveDirectoryIterator::SKIP_DOTS),
                      \
      RecursiveIteratorIterator::SELF_FIRST) as $oItem)
              {
                  if (
      in_array($oItem->getFilename(), $ignored)) {
                      continue;
                  }
                  if (
      $oItem->isDir())
                      {

                          
      mkdir($sTargetPath.DIRECTORY_SEPARATOR.$oIterator->getSubPathName());
                      }
                  else
                      {
                          
      copy($oItem$sTargetPath.DIRECTORY_SEPARATOR.$oIterator->getSubPathName());
                      }
              }

              return 
      true;
          }
          return 
      false;

      Kommentar


      • #4
        Nur wie kann ich jetzt eien ordner mit seinen Dateien auschließen?

        Kommentar


        • #5
          So richtig fortgeschritten finde ich das nicht,
          aber mal zur logik:
          einen kompletten ordner copieren:

          ob da directory iterator die beste wahl ist ?
          ich würde für so einen task copy -r nehmen und das betriebsystem den job machen lassen,
          andersfalls findest Du in der docu bessere recursive copy möglichkeiten.

          das problem mit dem überschreiben:

          ich halte es in den seltensten fällen für eine bnruachbare lösung zu überschreiben, eine simple versionierung wie bei logrotate ist mE. immer angesagt.

          also, gib zu kiefer.dev , es ist eine Aufgabe, füpr die Schule.

          Kommentar


          • #6
            Ganz ehrlich, wenn Du das Script selber entwickelt hast, sollte die Frage, wie Du ein Verzeichnis ausschließt nicht aufkommen.
            Denk bitte mal nach, was Du dafür lediglich machen musst...


            Zitat von tomBuilder Beitrag anzeigen
            So richtig fortgeschritten finde ich das nicht
            Hoppla, ist mir gar nicht aufgefallen, danke!

            [MOD: verschoben von PHP-Fortgeschritten]
            Competence-Center -> Enjoy the Informatrix
            PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

            Kommentar


            • #7
              Ne es ist keine aufgabe für die schule, sondern ich habe ein kleines CMS geschrieben was jetzt eine update funktion benötigt und da möchte ich halt die dateien überschreiben und gewisse ordner wie die themes oder die bilder nicht überschreiben da sie ja vom benutzer hochgeladen worden sind und erhalten bleiben müssen
              Zitat von tomBuilder Beitrag anzeigen

              ob da directory iterator die beste wahl ist ?
              Was wäre denn besser, das system würde ich es ungern überlassen

              VG
              Sebastian

              Kommentar


              • #8
                Mache es doch genauso wie bei den Dateien, ein Ausschlussarray. Wenn du schon eine Funktion für das Kopieren hast, würde ich das Array mit den zu ignorierenden Verzeichnissen und Dateien dort mit übergeben anstatt diese fest zu verdrahten.

                Kommentar


                • #9
                  Wäre es dann nicht sinnvoller die Anwendung so zu strukturieren, dass vom Benutzer angelegte Inhalte erst gar nicht überschrieben werden können? Zum Beispiel ein custom-Order oder ähnliches.

                  Kommentar

                  Lädt...
                  X