PHP-将文件移至服务器上的其他文件夹


180

如果他们不再需要我的网站上的用户,则需要在他们上载图像后将其从服务器上删除。我以前unlink在PHP中使用该函数,但此后被告知这可能具有很大的风险和安全性问题。(下面的先前代码:)

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

相反,我现在只想将文件移动到另一个文件夹中。他们必须先上传文件很长时间,然后才能登录帐户。如果我有存储用户图像的主文件夹:

user/

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

user/del/

是否有命令将文件移动到其他文件夹?这样说:

user/image1.jpg

移至/成为

user/del/image1.jpg

Answers:


418

rename功能做到这一点

docs重命名

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

如果要将现有文件保存在同一位置,则应使用 copy

docs复制

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

来自文档的代码片段


named()和copy()的一个问题是您丢失了所有元数据,例如创建和修改日期。
Musikdoktor


17

如果要将文件移动到新路径并保留原始文件名。用这个:

$source_file = 'foo/image.jpg';
$destination_path = 'bar/';
rename($source_file, $destination_path . pathinfo($source_file, PATHINFO_BASENAME));

像魅力一样工作。
ucMedia

1

一些解决方案是首先复制()文件(如上所述),并在目标文件存在时-从先前的本地化取消链接()文件。另外,您可以在取消链接之前验证MD5校验和,以确保


1

创建一个函数来移动它:

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

1

我使用外壳读取所有数据文件,然后分配给数组。然后我将文件移到最高位置。

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

请进一步说明-使用PHP如何工作?
Nico Haase

0

使用copy()unlink()函数

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

-4

shell_exec('mv文件名dest_filename');


2
欢迎使用Stack Overflow!尽管此代码段可以解决问题,但提供说明确实有助于提高您的帖子质量。请记住,您将来会为读者回答这个问题,而这些人可能不知道您提出代码建议的原因。也请尽量不要在代码中添加解释性注释,这会降低代码和解释的可读性!
Filnor
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.