Carica l’immagine con un nome univoco

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 .