Wie benenne ich eine hochgeladene Datei um, bevor ich sie in einem Verzeichnis speichere?

Lesezeit: 3 Minuten

Wie benenne ich eine hochgeladene Datei um bevor ich sie
George Edward Portillo

Unten ist der Code, den ich verwendet habe, um Dateien in ein Verzeichnis hochzuladen. Es funktioniert gut. Meine Hauptfrage ist:

move_uploaded_file() ist derjenige, der die hochgeladene Datei in das Verzeichnis speichert, und das ist auch meine Vermutung move_uploaded_file() ist derjenige, der den Namen dafür festlegt.

Wie kann ich den Namen meiner Datei in eine Zufallszahl ändern?

Ich habe es im Folgenden versucht:

$allowedExts = array("gif", "jpeg", "jpg", "png");
$temp = explode(".", $_FILES["file"]["name"]);
$extension = end($temp);
if ((($_FILES["file"]["type"] == "image/gif") || ($_FILES["file"]["type"] == "image/jpeg") || ($_FILES["file"]["type"] == "image/jpg") || ($_FILES["file"]["type"] == "image/pjpeg") || ($_FILES["file"]["type"] == "image/x-png") || ($_FILES["file"]["type"] == "image/png")) && ($_FILES["file"]["size"] < 100000) && in_array($extension, $allowedExts)) {
    if ($_FILES["file"]["error"] > 0) {
        echo "Return Code: " . $_FILES["file"]["error"] . "<br>";
    } else {

        $fileName = $temp[0] . "." . $temp[1];
        $temp[0] = rand(0, 3000); //Set to random number
        $fileName;

        if (file_exists("../img/imageDirectory/" . $_FILES["file"]["name"])) {
            echo $_FILES["file"]["name"] . " already exists. ";
        } else {
            move_uploaded_file($_FILES["file"]["tmp_name"], "../img/imageDirectory/" . $_FILES["file"]["name"]);
            echo "Stored in: " . "../img/imageDirectory/" . $_FILES["file"]["name"];
        }
    }
} else {
    echo "Invalid file";
}

Ich habe versucht, Variablen wie die zu ändern $_FILES[“file”][“name”] und ersetzen Sie es durch die $Dateiname; Variable, damit der neue Name gespeichert werden kann.

1646934847 653 Wie benenne ich eine hochgeladene Datei um bevor ich sie
Ben Glück

Sie können den Namen der Datei einfach ändern, indem Sie den Namen der Datei im zweiten Parameter von ändern move_uploaded_file.

Anstatt

move_uploaded_file($_FILES["file"]["tmp_name"], "../img/imageDirectory/" . $_FILES["file"]["name"]);

Verwenden

$temp = explode(".", $_FILES["file"]["name"]);
$newfilename = round(microtime(true)) . '.' . end($temp);
move_uploaded_file($_FILES["file"]["tmp_name"], "../img/imageDirectory/" . $newfilename);

Geändert, um Ihre Frage widerzuspiegeln, wird eine Zufallszahl basierend auf der aktuellen Zeit erstellt und die Erweiterung aus der ursprünglich hochgeladenen Datei angehängt.

  • Besser verwenden microtime() um stattdessen einen Zeitstempel zu generieren rand. Wenn der Zufallswert mit einem bereits verwendeten Wert kollidiert, würde die Datei ohne Warnung überschrieben.

    – tmh

    9. September 2013 um 19:49 Uhr


  • Das OP verwendet file_exists()wenn er es also richtig verwendet, besteht eine Wahrscheinlichkeit von 0 %, dass dies passiert.

    – Ben Glück

    9. September 2013 um 19:54 Uhr

  • war eine großartige und einfach zu verwendende Antwort von Ben Fortune. Danke Ben

    – Benutzer2491321

    4. Januar 2015 um 16:17 Uhr

  • Wir können benutzen time() außerdem ist es robuster.

    – Mihir Ujjainwal

    25. Februar 2015 um 18:34 Uhr

  • Dies beantwortet die Frage, verarbeitet jedoch nicht das Abrufen der Datei nach dem Hochladen. Die Verwendung von file_exists ist gut, um zu vermeiden, dass die Datei mit demselben Namen beim Hochladen überschrieben wird. Aber wie können Sie diese Datei danach abrufen? Ich würde lieber eine eindeutige ID in der Datenbank verwenden und jede hochgeladene Datei mit dieser eindeutigen ID speichern (umbenennen) (in der DB haben Sie im selben Datensatz den ursprünglichen Dateinamen und die eindeutige ID). Rufen Sie die Datei anhand ihrer eindeutigen ID ab und zeigen Sie die Datei mit ihrem Dateinamen an/laden Sie sie herunter. Wie wir die Datei auf dem Server speichern und wie sie angezeigt oder heruntergeladen wird, ist unterschiedlich.

    – Adrian P.

    7. Juli 2015 um 15:31 Uhr

Sie vermuten richtig. Lesen Sie die Handbuchseite für move_uploaded_file. Stellen Sie den zweiten Parameter auf den Ort ein, an dem Sie die Datei speichern möchten.

Wenn es nicht funktioniert, stimmt etwas mit deinem nicht $fileName. Bitte poste deinen aktuellsten Code.

Sie können dies versuchen,

$newfilename= date('dmYHis').str_replace(" ", "", basename($_FILES["file"]["name"]));

move_uploaded_file($_FILES["file"]["tmp_name"], "../img/imageDirectory/" . $newfilename);

1646934847 63 Wie benenne ich eine hochgeladene Datei um bevor ich sie
Vorliebe

/* create new name file */
$filename   = uniqid() . "-" . time(); // 5dab1961e93a7-1571494241
$extension  = pathinfo( $_FILES["file"]["name"], PATHINFO_EXTENSION ); // jpg
$basename   = $filename . "." . $extension; // 5dab1961e93a7_1571494241.jpg

$source       = $_FILES["file"]["tmp_name"];
$destination  = "../img/imageDirectory/{$basename}";

/* move the file */
move_uploaded_file( $source, $destination );

echo "Stored in: {$destination}";

Die move_uploaded_file wird false zurückgeben, wenn die Datei nicht erfolgreich verschoben wurde. Sie können etwas in Ihren Code einfügen, um Sie in einem Protokoll zu warnen, wenn dies passiert, das sollte Ihnen helfen, herauszufinden, warum Sie Probleme beim Umbenennen der Datei haben

988610cookie-checkWie benenne ich eine hochgeladene Datei um, bevor ich sie in einem Verzeichnis speichere?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy