Как переместить несколько файлов .txt в папки в соответствии с их именами в PHP? - PullRequest
0 голосов
/ 20 марта 2020

У меня есть папка, которая содержит 3 подпапки и TXT-файлы, названные так:

enter image description here

Мне бы хотелось:

  • Если файл начинается с A500, его следует переместить в подпапку FR
  • Если файл начинается с A700, он перемещается в подпапку ES.
  • Если файл начинается с A900, он перемещен в подпапку PT.

Я выполнил эту функцию, но она не работает ... Где моя ошибка?

<?php

function deplacementFile( $path ) {

   $dir    = './test/';
   $allFiles = scandir($dir);

   foreach($allFiles as $file) {

        if (!in_array($file,array(".","..","FR", "ES", "PT")))
      { 

      $file = $dir.$file;
      $filename = basename( $file );

       //read the entire string
       $str = file_get_contents( $file );

       if ( strpos( $filename, 'A500_' ) === 0 ) {
        $dossierDestination1 = './test/FR/';
        if(!copy($dir, $dossierDestination1)) { 
            echo "error copy";
            } else { 
            if(!unlink($dir)) { 
                echo "error unlink"; 
            } 
        }
      }
        else if ( strpos( $filename, 'A700_' ) === 0 ) {
            $dossierDestination2 = './test/ES/';
            if(!copy($dir, $dossierDestination2)) { 
                echo "error copy";
                } else { 
                if(!unlink($dir)) { 
                    echo "error unlink"; 
                } 
            }
          }

       else if ( strpos( $filename, 'A900_' ) === 0 ) {
        $dossierDestination3 = './test/PT/';
        if(!copy($dir, $dossierDestination3)) { 
            echo "error copy";
            } else { 
            if(!unlink($dir)) { 
                echo "error unlink"; 
            } 
        }
      }
            else {

           return false;
       }
    }
  }
}

deplacementFile( './test/' ); 

echo "Successfully completed!";
?>

1 Ответ

1 голос
/ 20 марта 2020

Вот обновленная версия вашего скрипта:

function deplacementFile( $path ) {

    $dir    = './test/';
    $allFiles = scandir($dir);

    foreach($allFiles as $file) {
        if (!in_array($file,array(".","..","FR", "ES", "PT")))
        { 
            // $file - is PATH to copied file
            $file = $dir.$file;
            // $filename - is the name of file being copied
            $filename = basename( $file );

            $paths = [
                'A500_' => './test/FR/',
                'A700_' => './test/ES/',
                'A900_' => './test/PT/',
            ];
            foreach ($paths as $key => $dest) {
                if (strpos( $filename, $key ) === 0) {
                    // copy from PATH to new path which is `dest and filename`
                    if(!copy($file, $dest . $filename)) { 
                        echo "error copy";
                    } else { 
                        if(!unlink($file)) { 
                            echo "error unlink"; 
                        } 
                    }
                    break;
                }
            }
        }
    }
}

Кроме того, рассмотрим rename, который перемещает файл, аргументы те же, но вы не нужно unlink.

...