PHP - 将文件移动到服务器上的其他文件夹中

odd*_*uck 166 php directory move unlink

我需要允许我的网站上的用户在上传后将其图像从服务器上删除,如果他们不再需要它们的话.我以前unlink在PHP中使用该函数,但后来被告知这可能存在风险并且存在安全问题.(上面的代码:)

if(unlink($path.'image1.jpg')){ 
     // deleted
}
Run Code Online (Sandbox Code Playgroud)

相反,我现在只想将文件移动到另一个文件夹中.这必须能够在他们首次上传文件后很长时间内完成,以便他们在登录帐户时.如果我有存储用户图像的主文件夹:

user/
Run Code Online (Sandbox Code Playgroud)

然后在一个名为del的文件夹中,这是放置其不需要的图像的目的地:

user/del/
Run Code Online (Sandbox Code Playgroud)

是否有将文件移动到其他文件夹的命令?所以说:

user/image1.jpg
Run Code Online (Sandbox Code Playgroud)

移动到/变成

user/del/image1.jpg
Run Code Online (Sandbox Code Playgroud)

MKr*_*ers 397

rename功能可以做到这一点

docs重命名

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

如果要将现有文件保留在应使用的相同位置 copy

docs copy

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

如果要移动上传的文件,请使用move_uploaded_file,虽然这与rename此函数几乎相同,但也检查给定文件是通过文件上传的文件POST,这可以防止例如移动本地文件

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");
    }
}
Run Code Online (Sandbox Code Playgroud)

来自docs的代码snipet

  • rename() 和 copy() 的一个问题是您丢失了所有元数据,例如创建和修改日期......请记住这一点。 (2认同)

Ben*_*une 89

使用rename()函数.

rename("user/image1.jpg", "user/del/image1.jpg");
Run Code Online (Sandbox Code Playgroud)


Nab*_*.Z. 12

如果要使用保留原始文件名在新路径中移动文件.用这个:

$source_file = 'foo/image.jpg';
$destination_path = 'bar/';
rename($source_file, $destination_path . pathinfo($source_file, PATHINFO_BASENAME));
Run Code Online (Sandbox Code Playgroud)