我在这里面临一个奇怪的情况:我有一个高级的多部分文件上传脚本,例如,通过扫描目标文件夹检查重复的文件名,然后用迭代号重命名重复的名称。现在,这里的问题是,由于某种原因,如果没有提交重复项,脚本会带绿灯,但如果输入了重复,脚本将在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;
}
}
}
}
?>
答案 0 :(得分:0)
唯一的原因可能是:
1)如果filename是有效的上传文件,但某些文件无法移动 原因,不会发生任何操作,move_uploaded_file()将返回 假。此外,还会发出警告。
2)如果filename不是有效的上传文件,则不会发生任何操作,并且 move_uploaded_file()将返回FALSE。
您的案例似乎是2.尝试设置:
error_reporting(E_ALL);
ini_set("display_errors", 1);
位于脚本顶部以查看错误。当然你会看到它们 不要试图寻找一些魔力。 Jus调试你的代码。