PHP重命名文件(如果存在)

PHP重命名文件(如果存在),php,file,if-statement,rename,exists,Php,File,If Statement,Rename,Exists,我一直在处理图像上传,我想知道为什么这不能正常工作?如果文件已经存在,则不会使用新名称移动/上载该文件 if(isset($_REQUEST['submit'])){ $filename= $_FILES["imgfile"]["name"]; if ((($_FILES["imgfile"]["type"] == "image/gif")|| ($_FILES["imgfile"]["type"] == "image/jpeg") || ($_FILES["imgf

我一直在处理图像上传,我想知道为什么这不能正常工作?如果文件已经存在,则不会使用新名称移动/上载该文件

if(isset($_REQUEST['submit'])){
     $filename=  $_FILES["imgfile"]["name"];
        if ((($_FILES["imgfile"]["type"] == "image/gif")|| ($_FILES["imgfile"]["type"] == "image/jpeg") || ($_FILES["imgfile"]["type"] == "image/png")  || ($_FILES["imgfile"]["type"] == "image/pjpeg")) && ($_FILES["imgfile"]["size"] < 20000000)){
    $loc = "userpics/$filename";
    if(file_exists($loc)){
        $increment = 0;
        list($name, $ext) = explode('.', $loc);
        while(file_exists($loc)) {
            $increment++;
            $loc = $name. $increment . '.' . $ext;
            $filename = $name. $increment . '.' . $ext;
        }
      move_uploaded_file($_FILES["imgfile"]["tmp_name"],"userpics/$loc");

    }
    else{
      move_uploaded_file($_FILES["imgfile"]["tmp_name"],"userpics/$filename");

    }
     }
     else{
    echo "invalid file.";
     }
}
if(isset($\u请求['submit'])){
$filename=$\u文件[“imgfile”][“name”];
如果(($_文件[“imgfile”][“type”]=“image/gif”)|($_文件[“imgfile”][“type”]=“image/jpeg”)|($_文件[“imgfile”][“type”]=“image/png”)|($_文件[“imgfile”][“type”]=“image/pjpeg”)&($59u文件[“imgfile”][“size”]=“size”<20000000)){
$loc=“userpics/$filename”;
如果(文件_存在($loc)){
$increment=0;
列表($name,$ext)=分解('.',$loc);
while(文件_存在($loc)){
$increment++;
$loc=$name.$increment.'..$ext;
$filename=$name.$increment.'..$ext;
}
移动上传的文件($文件[“imgfile”][“tmp_名称”],“userpics/$loc”);
}
否则{
移动上传的文件($文件[“imgfile”][“tmp_名称”],“userpics/$filename”);
}
}
否则{
回显“无效文件。”;
}
}
试试这个:

$fullpath = 'images/1086_002.jpg';
$additional = '1';

while (file_exists($fullpath)) {
    $info = pathinfo($fullpath);
    $fullpath = $info['dirname'] . '/'
              . $info['filename'] . $additional
              . '.' . $info['extension'];
}
感谢这里:

试试这个:

$fullpath = 'images/1086_002.jpg';
$additional = '1';

while (file_exists($fullpath)) {
    $info = pathinfo($fullpath);
    $fullpath = $info['dirname'] . '/'
              . $info['filename'] . $additional
              . '.' . $info['extension'];
}

感谢此处:

您已将文件夹路径包含在
$loc
中,然后您尝试将文件移动到
userpics/$loc
,这可能是不正确的。见评论:

$filename = "example.jpg";
$loc = "userpics/$filename";
if(file_exists($loc)){
    $increment = 0;
    list($name, $ext) = explode('.', $loc);
    while(file_exists($loc)) {
        $increment++;
        // $loc is now "userpics/example1.jpg"
        $loc = $name. $increment . '.' . $ext;
        $filename = $name. $increment . '.' . $ext;
    }

    // Now you're trying to move the uploaded file to "userpics/$loc"
    //   which expands to "userpics/userpics/example1.jpg"
    move_uploaded_file($_FILES["imgfile"]["tmp_name"],"userpics/$loc");
} else {
    // ...

作为一般调试技巧,请始终检查函数的返回值,以查看它是否成功。其次,如果函数失败,则显示其输入值。这将使调试变得更加容易。

您已将文件夹路径包含在
$loc
中,然后尝试将文件移动到
userpics/$loc
,这可能是不正确的。见评论:

$filename = "example.jpg";
$loc = "userpics/$filename";
if(file_exists($loc)){
    $increment = 0;
    list($name, $ext) = explode('.', $loc);
    while(file_exists($loc)) {
        $increment++;
        // $loc is now "userpics/example1.jpg"
        $loc = $name. $increment . '.' . $ext;
        $filename = $name. $increment . '.' . $ext;
    }

    // Now you're trying to move the uploaded file to "userpics/$loc"
    //   which expands to "userpics/userpics/example1.jpg"
    move_uploaded_file($_FILES["imgfile"]["tmp_name"],"userpics/$loc");
} else {
    // ...

作为一般调试技巧,请始终检查函数的返回值,以查看它是否成功。其次,如果函数失败,则显示其输入值。它将使调试变得更容易。

而不是
时,您应该执行
如果(文件_存在){…}
也许您应该检查
移动_上传_文件
的返回值?看起来如果文件存在,您最终会将其移动到
userpics/userprics/blahblah
@Fred ii-:这只会重命名文件一次,不会检查重命名的文件是否存在。@bluedog很好;我已更正。您应该检查文件扩展名,否则可以上载
.php
文件或其他恶意文件。而不是
while
,您应该执行
如果(文件存在){…}
可能您应该检查
move\u uploaded\u file
的返回值?看起来如果文件存在,您最终会将其移动到
userpics/userprics/blahblah
@Fred ii-:这只会重命名文件一次,不会检查重命名的文件是否存在。@bluedog很好;我已更正。您应该检查文件扩展名,否则可以上载
.php
文件或其他恶意文件。