Die beiden von dir genannten Methoden sind identisch, abgesehen davon, dass "eine neue tmp-Datei anlegen" aufwändiger ist.
Speichere einfach die erfolgreich hochgeladenen Dateien in ein temporäres Verzeichnis, speichere den Status jeder Datei + Namen in einer Session und dann kannst du nach dem neuen Request damit weiterarbeiten.
Etwas in die Richtung (nicht übernehmen, ist lediglich Pseudocode):
PHP
/* Files sent. */
if($formularFirstSent)
{
/* Create temporary dir. */
$tmpDirName = "tmpDir_". uniqid();
mkdir($tmpDirName);
/* Loop through uploaded files, save them. */
foreach($_FILES["uploadedFile"] as $file)
{
/* Validate file (type, size, ...). */
if(isValidFile($file))
{
/* Move file to temporary dir, track errors in session. */
$fileName = $_FILES["uploadedFile"]["tmp_name"];
if(!move_uploaded_files($fileName, $tmpDirName))
$_SESSION["uploadedFiles"][$fileName] = ["dir" => $tmpDirName, "error" => true];
else
$_SESSION["uploadedFiles"][$fileName] = ["dir" => $tmpDirName, "error" => false];
}
else
{
$_SESSION["uploadedFiles"][$fileName] = ["dir" => tmpDirName, "error" => true];
}
}
}
/* Just handling information for files sent. */
elseif($formularSecondSent)
{
/* Get values from form. */
$keepFile =
[
"file1" => true,
"file2" => false,
/* ... */
];
/* Loop files and keep or delete them depending on users choice. */
foreach($_SESSION["uploadedFiles"] as $key => $value)
{
if($keepFile[$key])
rename($value["dir"] . $key, $destinationDir . $destinationFileName);
else
unlink($value["dir"] . $key);
}
}
Alles anzeigen