PHP - Pindahkan file ke folder lain di server

182

Saya perlu mengizinkan pengguna di situs web saya untuk menghapus gambar mereka dari server setelah mereka mengunggahnya jika mereka tidak lagi menginginkannya. Saya sebelumnya menggunakan unlinkfungsi dalam PHP tetapi sejak itu diberitahu bahwa ini bisa sangat berisiko dan masalah keamanan. (Kode sebelumnya di bawah ini :)

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

Sebaliknya saya sekarang hanya ingin memindahkan file ke folder yang berbeda. Ini harus dapat dilakukan dalam waktu lama setelah mereka mengunggah file terlebih dahulu sehingga kapan saja mereka masuk ke akun mereka. Jika saya memiliki folder utama yang menyimpan gambar pengguna:

user/

dan kemudian di dalam folder bernama del yang merupakan tujuan untuk meletakkan gambar yang tidak diinginkan mereka:

user/del/

Apakah ada perintah untuk memindahkan file ke folder lain? Jadi itu mengatakan:

user/image1.jpg

pindah ke / menjadi

user/del/image1.jpg
orang aneh
sumber

Jawaban:

421

The renamefungsi melakukan ini

docs rename

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

Jika Anda ingin menyimpan file yang ada di tempat yang sama, Anda harus menggunakannya copy

salinan dokumen

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

Jika Anda ingin memindahkan file yang diunggah menggunakan move_uploaded_file, meskipun ini hampir sama dengan renamefungsi ini juga memeriksa bahwa file yang diberikan adalah file yang diunggah melalui POST, ini mencegah misalnya bahwa file lokal dipindahkan

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");
    }
}

snipet kode dari dokumen

MKroeders
sumber
Satu masalah dengan rename () dan copy () adalah Anda kehilangan semua metadata seperti tanggal dibuat dan dimodifikasi misalnya .. ada dalam pikiran.
Musikdoktor
96

Gunakan fungsi rename () .

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

Jika Anda ingin memindahkan file di jalur baru dengan menyimpan nama file asli. Gunakan ini:

$source_file = 'foo/image.jpg';
$destination_path = 'bar/';
rename($source_file, $destination_path . pathinfo($source_file, PATHINFO_BASENAME));
Nabi KAZ
sumber
Bekerja seperti pesona.
ucMedia
1

Beberapa solusi pertama-tama adalah menyalin () file (seperti yang disebutkan di atas) dan ketika file tujuan ada - batalkan tautan () file dari pelokalan sebelumnya. Selain itu, Anda dapat memvalidasi checksum MD5 sebelum memutuskan tautannya untuk memastikan

quardas
sumber
1

Buat fungsi untuk memindahkannya:

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

Saya menggunakan shell membaca semua file data kemudian menetapkan ke array. Lalu saya memindahkan file di posisi teratas.

i=0 
for file in /home/*.gz; do
    $file
    arr[i]=$file
    i=$((i+1)) 
done 
mv -f "${arr[0]}" /var/www/html/
Untuk Quoc Diep
sumber
Tolong jelaskan lebih lanjut - bagaimana ini bisa bekerja menggunakan PHP?
Nico Haase
0

gunakan fungsi salin () dan batalkan tautan ()

$moveFile="path/filename";
if (copy($csvFile,$moveFile)) 
{
  unlink($csvFile);
}
Arunprabakaran M
sumber
-4

shell_exec ('mv filename dest_filename');

pengguna10395079
sumber
2
Selamat Datang di Stack Overflow! Sementara potongan kode ini dapat menyelesaikan pertanyaan, termasuk penjelasan sangat membantu untuk meningkatkan kualitas posting Anda. Ingatlah bahwa Anda menjawab pertanyaan untuk pembaca di masa depan, dan orang-orang itu mungkin tidak tahu alasan untuk saran kode Anda. Tolong juga cobalah untuk tidak membuat kerumunan kode Anda dengan komentar penjelasan, ini mengurangi keterbacaan kode dan penjelasan!
Filnor