我不希望php move_uploaded_file覆盖现有文件

时间:2012-06-19 09:30:13

标签: php file-upload

我有一个允许用户提交文件的html页面 以下是我保存提交文件的Web服务。但我不想让move_uploaded_files覆盖现有文件?我该怎么办?谢谢

$tmpname = $_FILES["image"]["tmp_name"];
$movedname = "submit-img/" . $_POST["category"] . "/" . $_FILES["image"]["name"];
$prevPage = parse_url($_SERVER['HTTP_REFERER']);

move_uploaded_file($tmpname, $movedname);

3 个答案:

答案 0 :(得分:5)

在你跳跃之前先看看:

if (!is_file($movedname)) {
    move_uploaded_file($tmpname, $movedname);
}

答案 1 :(得分:0)

我认为处理这种情况的一种更有效的方法是检查文件是否存在,在这种情况下编辑文件名,直到找不到匹配项,然后上传文件。

public class MyMain()
    public void MyMethod() {
        AnotherClass.TheEventHandler += DoSomeThing;
    }

    private void DoSomething(object sender, EventArgs e) {
        Debug.WriteLine("I did something");
        AnotherClass.ClearAllDelegatesOfTheEventHandler();
    }

}

public static class AnotherClass {

    public static event EventHandler TheEventHandler;

    public static void ClearAllDelegatesOfTheEventHandler() {

        foreach (Delegate d in TheEventHandler.GetInvocationList())
        {
            TheEventHandler -= (EventHandler)d;
        }
    }
}

答案 2 :(得分:0)

您可以按如下方式检查:


if( !is_file($movedname)) {

    move_uploaded_file($tmpname, $movedname);
}

或者假设您想要将相同的文件上传到其他目的,您可以按照以下步骤进行上传:


$tmpname = $_FILES["image"]["tmp_name"].''.time();  // use timestamp string to prevent overwrite files

$movedname = "submit-img/" . $_POST["category"] . "/" . $_FILES["image"]["name"];
$prevPage = parse_url($_SERVER['HTTP_REFERER']);

move_uploaded_file($tmpname, $movedname);