wake-up-neo.net

PHP - Verschieben Sie eine Datei in einen anderen Ordner auf dem Server

Ich muss Benutzern auf meiner Website gestatten, ihre Bilder nach dem Hochladen vom Server zu löschen, wenn sie nicht mehr gewünscht werden. Ich habe zuvor die Funktion unlink in PHP verwendet, aber seitdem wurde mir gesagt, dass dies ziemlich riskant sein kann und ein Sicherheitsrisiko darstellt. (Vorheriger Code unten :)

if(unlink($path.'image1.jpg')){ 
     // deleted
}

Stattdessen möchte ich die Datei jetzt einfach in einen anderen Ordner verschieben. Dies muss lange geschehen, nachdem sie die Datei zum ersten Mal hochgeladen haben, also immer, wenn sie sich bei ihrem Konto anmelden. Wenn ich den Hauptordner habe, in dem die Bilder des Benutzers gespeichert sind:

user/

und dann einen Ordner namens del, in den die unerwünschten Bilder eingefügt werden sollen:

user/del/

Gibt es einen Befehl, um eine Datei in einen anderen Ordner zu verschieben? Also das sagen:

user/image1.jpg

bewegt sich zu/wird

user/del/image1.jpg
148
odd_duck

Die Funktion rename erledigt dies

docs umbenennen

rename('image1.jpg', 'del/image1.jpg');

Wenn Sie die vorhandene Datei an derselben Stelle behalten möchten, sollten Sie copy verwenden.

docs copy

copy('image1.jpg', 'del/image1.jpg');

Wenn Sie eine hochgeladene Datei verschieben möchten, verwenden Sie den move_uploaded_file, obwohl dies fast dem rename entspricht. Diese Funktion prüft auch, ob es sich bei der angegebenen Datei um eine Datei handelt, die über den POST hochgeladen wurde. Dies verhindert beispielsweise, dass eine lokale Datei verschoben wird

docs move_uploaded_file

$uploads_dir = '/uploads';
foreach ($_FILES["pictures"]["error"] as $key => $error) {
    if ($error == UPLOAD_ERR_OK) {
        $tmp_name = $_FILES["pictures"]["tmp_name"][$key];
        $name = $_FILES["pictures"]["name"][$key];
        move_uploaded_file($tmp_name, "$uploads_dir/$name");
    }
}

Code-Snipet aus Dokumenten

382
MKroeders

Verwenden Sie die Funktion rename () .

rename("user/image1.jpg", "user/del/image1.jpg");
78
Ben Fortune

Wenn Sie die Datei in einen neuen Pfad verschieben möchten, behalten Sie den ursprünglichen Dateinamen. benutze das:

$source_file = 'foo/image.jpg';
$destination_path = 'bar/';
rename($source_file, $destination_path . pathinfo($source_file, PATHINFO_BASENAME));
9
Nabi K.A.Z.

Ich benutze Shell, lese alle Datendateien und ordne sie dem Array zu. Dann bewege ich die Datei in die oberste Position.

i=0 
for file in /home/*.gz; do
    $file
    arr[i]=$file
    i=$((i+1)) 
done 
mv -f "${arr[0]}" /var/www/html/
1
To Quoc Diep

Erstellen Sie eine Funktion, um sie zu verschieben:

function move_file($file, $to){
    $path_parts = pathinfo($file);
    $newplace   = "$to/{$path_parts['basename']}";
    if(rename($file, $newplace))
        return $newplace;
    return null;
}
0
Marcelo

Eine Lösung ist zunächst das Kopieren () der Datei (wie oben erwähnt) und, wenn die Zieldatei vorhanden ist, die unlink () - Datei aus der vorherigen Lokalisierung. Zusätzlich können Sie die MD5-Prüfsumme überprüfen, bevor Sie die Verknüpfung aufheben, um sicher zu sein

0
quardas

benutze copy () und unlink () function

$moveFile="path/filename";
if (copy($csvFile,$moveFile)) 
{
  unlink($csvFile);
}
0
MSA