将具有特定扩展名的文件从目录移动到 PHP 中的子目录

Move Files with specific extentions from a directory to a subdirectory in PHP

以前可能有人问过这个问题,但我在之前建议的解决方案中找不到解决方案。我是 PHP 的新手,我正在尝试将扩展名为 .zip 的文件移动到子文件夹。我在源文件夹中循环查找特定文件后,无法使用 rename() 方法将文件移动到子文件夹中。

<?php
$updatesFolder = realpath('C:\xampp\htdocs\project\updates');
$archiveFolder = realpath('C:\xampp\htdocs\project\updates\archive');
if (file_exists($updatesFolder) && is_dir($updatesFolder)) {         
    // Get the files of the directory as an array
    $scan_arr = scandir($updatesFolder);
    $files_arr = array_diff($scan_arr, array('.','..') );
    //echo "<pre>"; print_r( $files_arr ); echo "</pre>";
    // Get each files of directory with line break
    foreach ($files_arr as $file) {
        //Get the file path
        $file_path = $updatesFolder.$file;
        //echo $file_path;
        // Get the file extension
        $file_ext = pathinfo($file_path, PATHINFO_EXTENSION);
        if ($file_ext=="zip") {
            $data = $file;
            $dirHandle = opendir($updatesFolder);
            $dirHandle2 = opendir($archiveFolder);
            while ($file = readdir($dirHandle)) {
                if ($file==$data) {
                    //unlink($updatesFolder.'/'.$file);
                    //var_dump ($data);
                    rename($updatesFolder , $archiveFolder); 
                }          
            }
        }                
    }   
} else {
    echo "Directory does not exists";
}
?>

里面有很多不必要的代码,我想是通过多次尝试修复它。

基本上主要问题是您必须一次移动一个文件,按名称

$updatesFolder = realpath('./database');
$archiveFolder  = realpath('./database/archive');
echo $updatesFolder . PHP_EOL . $archiveFolder . PHP_EOL;
if (file_exists($updatesFolder) && is_dir($updatesFolder)) {         
    
    $scan_arr = scandir($updatesFolder);
    $files_arr = array_diff($scan_arr, array('.','..') );
    
    foreach ($files_arr as $file) {

        if ("zip" == pathinfo($file, PATHINFO_EXTENSION)) {

            rename($updatesFolder.'/'.$file , $archiveFolder.'/'.$file);
        }                
    }   
} else {
    echo "Directory does not exists";
}