Quindi sto cercando di caricare alcune immagini in una cartella sul mio server con lo script qui sotto, ma salva ogni immagine come “image.jpg” e sovrascrive l’ultima immagine caricata se provo a caricarne più. Come puoi vedere io ha commentato la parte che controlla se il file esiste già per permettermi di caricare un file e sovrascrivere quello più recente. Aiuto! Ho bisogno di qualcosa di modificato per solo randomizzare il nome o ottenere il nome dell’immagine originale.
500000) { echo "Sorry, your file is too large."; $uploadOk = 0; } // Allow certain file formats if($imageFileType != "png" && $imageFileType != "jpg") { echo "Sorry, only PNG and JPG files are allowed."; $uploadOk = 0; } // Check if $uploadOk is set to 0 by an error if ($uploadOk == 0) { echo "Sorry, your file was not uploaded."; // if everything is ok, try to upload file } else { if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) { echo "The file ". basename( $_FILES["fileToUpload"]["name"]). " has been uploaded."; } else { echo "Sorry, there was an error uploading your file."; } } ?>
Un modo semplice per ottenere un nome file univoco è ottenere l’ora corrente di Unix in millisecondi e aggiungere (o anteporre) al nome file. Il comando da utilizzare è microtime()
.
Per esempio:
$target_file = $target_dir . microtime() . basename($_FILES["fileToUpload"]["name"]);
Puoi anche provare cose come hashing del file per ottenere un hash unico con bassa probabilità di collisioni, ma questo è più veloce e altrettanto efficace.
Puoi implementare qualcosa come il rinominare automaticamente i file di Windows:
$try = 1; while($file_exists($target_file)) { $target_file = preg_replace('/(\(\\d+\))*(\.[^\\(\\)]+)$/', "({$try})\\2", $target_file); $try++; }
Questo sostituirà il file “duplicate.jpg” con “duplicate (1) .jpg”, quindi “duplicate (2) .jpg” e così via.
Sarà ancora sobject a condizioni di gara improbabili, proprio come usando uniqid()
o microtime()
(che, in senso conflittuale, sono entrambi migliori).
Altrimenti, usa sempre tempnam()
. Puoi dare un’occhiata a questa risposta .