为了账号安全,请及时绑定邮箱和手机立即绑定

多次将同一文件复制到其他文件夹

多次将同一文件复制到其他文件夹

PHP
尚方宝剑之说 2021-08-28 14:52:00
当我单击提交按钮时,我使用此脚本将文件复制到其他文件夹<?phpif (isset($_POST['upload']) && isset($_POST['datae'])) {copy('../print/'.$_POST['datae'], '../Upload/'.$_POST['datae']);echo "<meta http-equiv='refresh' content='1'>";}?>现在我想知道如果我选择相同的文件名并提交两次或更多次会怎样。通常我已经选择的文件名将复制并覆盖已经存储在那里的相同文件。但我想要的是每当我提交两次或更多已经在目标文件夹中的文件时,它不会替换或覆盖,但它会复制相同的文件,只是文件名不同//example in my folderimg_7878.JPGimg_7878_copy1.JPGimg_7878_copy2.JPG也许我可以从这里得到帮助。
查看完整描述

2 回答

?
芜湖不芜

TA贡献1796条经验 获得超7个赞

您可以使用uniqid 函数和pathinfo 函数。像这样(未经测试):


if (isset($_POST['upload']) && isset($_POST['datae'])) {

    $uploadPath = '../Upload/' . $_POST['datae'];

    if (file_exists($uploadPath)) {

         $pathInfo = pathinfo($uploadPath);

         $uniqueId = uniqid('_copy_');

         $uploadPath = $pathInfo['dirname'] . '/' . $pathInfo['filename'] . $uniqueId . '.' . $pathInfo['extension'];

    }

    copy('../print/'.$_POST['datae'], $uploadPath);

}

您的代码中还有一个潜在的漏洞:有人可以使用 post 参数创建任何路径,例如:


$_POST['datae'] = '../../../env_file_with_passwords_file_from_protected_dir'


为避免这种情况,请阅读此文档文章。在您的情况下,您可以检查文件名以确保有人不会试图窃取您的文件:


if (isset($_POST['upload']) && isset($_POST['datae']) && preg_match('/^[a-z0-9_]+\.[a-z0-9_]+$/i', $_POST['datae'])) {

    copy('../print/'.$_POST['datae'], '../Upload/'.$_POST['datae']);

    echo "<meta http-equiv='refresh' content='1'>";

}


查看完整回答
反对 回复 2021-08-28
  • 2 回答
  • 0 关注
  • 165 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信