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

当我单击提交按钮时,我使用此脚本将文件复制到其他文件夹


<?php

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

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

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

}

?>

现在我想知道如果我选择相同的文件名并提交两次或更多次会怎样。通常我已经选择的文件名将复制并覆盖已经存储在那里的相同文件。


但我想要的是每当我提交两次或更多已经在目标文件夹中的文件时,它不会替换或覆盖,但它会复制相同的文件,只是文件名不同


//example in my folder

img_7878.JPG

img_7878_copy1.JPG

img_7878_copy2.JPG

也许我可以从这里得到帮助。


尚方宝剑之说
浏览 166回答 2
2回答

芜湖不芜

您可以使用uniqid 函数和pathinfo 函数。像这样(未经测试):if (isset($_POST['upload']) && isset($_POST['datae'])) {&nbsp; &nbsp; $uploadPath = '../Upload/' . $_POST['datae'];&nbsp; &nbsp; if (file_exists($uploadPath)) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;$pathInfo = pathinfo($uploadPath);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;$uniqueId = uniqid('_copy_');&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;$uploadPath = $pathInfo['dirname'] . '/' . $pathInfo['filename'] . $uniqueId . '.' . $pathInfo['extension'];&nbsp; &nbsp; }&nbsp; &nbsp; 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'])) {&nbsp; &nbsp; copy('../print/'.$_POST['datae'], '../Upload/'.$_POST['datae']);&nbsp; &nbsp; echo "<meta http-equiv='refresh' content='1'>";}
打开App,查看更多内容
随时随地看视频慕课网APP