move_uploaded_file将文件移动到目标,但返回false,为什么?

时间:2012-12-04 10:51:47

标签: php file-upload multipartform-data

我在这里面临一个奇怪的情况:我有一个高级的多部分文件上传脚本,例如,通过扫描目标文件夹检查重复的文件名,然后用迭代号重命名重复的名称。现在,这里的问题是,由于某种原因,如果没有提交重复项,脚本会带绿灯,但如果输入了重复,脚本将在move_upload_file部分返回false,但是仍然设法在目标文件夹中创建正确的副本。我只是想知道,为什么以及move_upload_file函数如何返回false,但仍然继续移动文件?

这是简化的脚本片段,只是试图指出你的问题:

<?php
//I'll loop all the files, which are submitted (in array)
foreach($_FILES['myFiles']['tmp_name'] as $key => $tmp_path) {

    //Alot of stuff (most likely unrelated) happens here

    //filepath contains both destination folder and filename
    $filepath = $destination_folder.$filename;

    if (file_exists($filepath)) {
        $duplicate_filename = true;

        //Some more stuff happens here. Then comes the actual moving part. Before this we have found duplicates 
        //for this upload file and counted proper duplicate value. 

        $file_increment = $num_of_filename_duplicates + 1;

        while ($duplicate_filename == true) {
            if(file_exists($filepath)) {
                //Separate filename parts and make new duplicate name with increment value
                $info = pathinfo($filename);
                $basename =  basename($filename,'.'.$info['extension']);
                $newfilename = $basename."(".$file_increment.").".$info['extension'];
                $filepath = $destination_folder.$newfilename;

                //Now, this returns me false, but still creates the file into destination
                if(move_uploaded_file($tmp_path, $filepath)) {
                    $file_success = true;
                    $file_increment++;
                }
                //So thats why this is true and I'll get the file_error
                else {
                    $file_error = "File error: Uploading of the file failed.";
                    break;
                }
            }
            else {
                $duplicate_filename = false;
            }
        }
    }
}
?>

1 个答案:

答案 0 :(得分:0)

唯一的原因可能是:

  

1)如果filename是有效的上传文件,但某些文件无法移动   原因,不会发生任何操作,move_uploaded_file()将返回   假。此外,还会发出警告。

     

2)如果filename不是有效的上传文件,则不会发生任何操作,并且   move_uploaded_file()将返回FALSE。

您的案例似乎是2.尝试设置:

error_reporting(E_ALL);
ini_set("display_errors", 1); 

位于脚本顶部以查看错误。当然你会看到它们 不要试图寻找一些魔力。 Jus调试你的代码。