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

Php 多次将同一文件复制到其他文件夹,php,Php,单击“提交”按钮时,我正在使用此脚本将文件复制到其他文件夹 <?php if (isset($_POST['upload']) && isset($_POST['datae'])) { copy('../print/'.$_POST['datae'], '../Upload/'.$_POST['datae']); echo "<meta http-equiv='refresh' content='1'>"; } ?> 也许我可以从这里得到帮助。您应该在点

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

<?php
if (isset($_POST['upload']) && isset($_POST['datae'])) {
copy('../print/'.$_POST['datae'], '../Upload/'.$_POST['datae']);
echo "<meta http-equiv='refresh' content='1'>";
}
?>

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

您应该在点上拆分文件名以分别获得扩展名,然后可以使用while循环更改targetname,直到找不到targetname的文件为止

其次,不要这样做:
echo”“
使用Location.reload();

if(isset($\u POST['upload'])和&isset($\u POST['datae'])){
$exp=explode('.',$_POST['datae']);
$targetName='../Upload/'.$exp[0];
$ext=$exp[1];
$target=$targetName.“.”$ext;
$count=0;
while(文件_存在($target)){
$target=$targetName.\u复制“$count.”.“$ext;
$count++;
}
复制('../print/'.$\u POST['datae'],$target);
回声“;
}
您可以使用和。像这样(未经测试):

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

$\u POST['datae']='../../../env_file_,其中包含密码\u file_,来自受保护的\u 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'>";
}
if(isset($\u POST['upload'])和isset($\u POST['datae'])和preg\u match('/^[a-z0-9\]+\[a-z0-9\]+$/i',$\u POST['datae'])){
复制('../print/'.$\u POST['datae'],'../Upload/'.$\u POST['datae']);
回声“;
}

请注意,必须使用
fileinfo
SplFileInfo
获取文件的基本名称/扩展名,因为名称中有多个点的文件仍然有效。
    if (isset($_POST['upload']) && isset($_POST['datae'])) {
        $exp = explode('.', $_POST['datae']);
        $targetName = '../Upload/'.$exp[0];
        $ext = $exp[1];
        $target = $targetName .".". $ext;
        $count = 0;
        while (file_exists($target)) {
            $target = $targetName . "_copy". $count .".". $ext;
            $count++;
        }
        copy('../print/'.$_POST['datae'], $target);
        echo "<meta http-equiv='refresh' content='1'>";
    }
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);
}
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'>";
}