PHP загружает файлы в несколько каталогов - PullRequest
0 голосов
/ 24 октября 2019

У меня есть код ниже, пытающийся загрузить несколько файлов в несколько каталогов (годы и месяцы).

<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" enctype="multipart/form-data">
    <input type="file" name="files[]" id="files" multiple />
    <br/>
    <input type="submit" name="submit" id="button" value="Backup!" />
</form>

<?php

if(isset($_FILES['files'])){
    $year= Date('Y');
    $month = Date('m');

$tempFile = $_FILES['files']['tmp_name'];
    for ($a=2017; $a <= $year; $a++) {
        echo "first<br>";
        if($a == 2017){
            for ($m=11; $m <= 12; $m++) {
                $targetDir = "../".$a."/".$m."/";
                echo "second<br>";

                foreach ($tempFile as $key => $tmp_name) {
                    echo "third<br>";

                    $fileName = $_FILES['files']['name'][$key];
                    $fileTemp = $_FILES['files']['tmp_name'][$key];
                    $targetFile = $targetDir.$fileName;
                    echo $targetFile."<br>";

                    if(!file_exists($targetFile)){
                        if(move_uploaded_file($fileTemp, $targetFile)){
                            echo "uploaded!<br>";
                        }else {
                            echo "error<br>";
                        }
                    }else {
                        echo "file already exists in ".$targetDir."<br>";
                    }
                }

            }
        }
    }
}
?>

2017 имеет только два каталога (11 и 12). Загрузка выполнена правильно в первом каталоге (11), но я получаю echo error, когда он пытается загрузить во второй каталог (12).

Последовательность цикла, которую выполняет код:

first
second
third
../2017/11/file-to-change.php
uploaded!
second
third
../2017/12/file-to-change.php
error
first
first

Я могу загрузить несколько файлов в первый получаемый каталог, но не могу загрузить что-либо во второй. Я попытался использовать другой for(), но он дает тот же результат, что и foreach().

1 Ответ

0 голосов
/ 11 ноября 2019

Пожалуйста, исправьте меня, если я ошибаюсь, но я думаю, что во втором цикле файл больше не был доступен после того, как он был загружен в первый каталог.

Поэтому я загружаю его в первый каталог, а затемЯ копирую его в другие каталоги.

foreach ($tempFile as $key => $tmp_name) {

    $fileName = $_FILES['files']['name'][$key];
    $fileTemp = $_FILES['files']['tmp_name'][$key];
    $targetFile = $targetDir.$fileName;

    if(!file_exists($targetFile)){
        if(move_uploaded_file($fileTemp, $targetFile)){
            echo "Uploaded in: ".json_encode($targetDir, JSON_UNESCAPED_SLASHES)."<br>";
        }else {
            echo "Error uploading in: ".json_encode($targetDir, JSON_UNESCAPED_SLASHES)."<br>";
        }
    }else {
        echo "File already exists in ".json_encode($targetDir, JSON_UNESCAPED_SLASHES)."<br>";
    }
}

for ($a=2017; $a <= $year; $a++) {
    if($a == 2017){
        for ($m = 11; $m <= 12; $m++) {
            $targetDirToCopy = "../".$a."/".$m."/".$fileName;
            if(copy($targetFile, $targetDirToCopy)){
                echo "Uploaded in: ".json_encode($targetDirToCopy, JSON_UNESCAPED_SLASHES)."<br>";
            }else {
                echo "File already exists in ".json_encode($targetDirToCopy, JSON_UNESCAPED_SLASHES)."<br>";
            }

        }
    }
    if($a == 2018){
        for ($m = 1; $m <= 12; $m++) {
            $targetDirToCopy = "../".$a."/".$m."/".$fileName;
            if(copy($targetFile, $targetDirToCopy)){
                echo "Uploaded in:".json_encode($targetDirToCopy, JSON_UNESCAPED_SLASHES)."<br>";
            }else {
                echo "File already exists in ".json_encode($targetDirToCopy, JSON_UNESCAPED_SLASHES)."<br>";
            }

        }
    }
    if($a == $ano){
        for ($m = 1; $m < ($mes-1); $m++) {
            $targetDirToCopy = "../".$a."/".$m."/".$fileName;
            if(copy($targetFile, $targetDirToCopy)){
                echo "Uploaded in:".json_encode($targetDirToCopy, JSON_UNESCAPED_SLASHES)."<br>";
            }else {
                echo "File already exists in ".json_encode($targetDirToCopy, JSON_UNESCAPED_SLASHES)."<br>";
            }

        }
    }
}
...