【发布时间】:2014-08-09 04:11:29
【问题描述】:
我一直在处理图片上传问题,想知道为什么这不能正常工作?如果文件已经存在,它不会移动/上传具有新名称的文件。
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.";
}
}
【问题讨论】:
-
你应该使用
while而不是if(file_exists){...} -
也许你应该检查
move_uploaded_file的返回值?看起来如果文件存在,你最终将它移动到userpics/userprics/blahblah -
@Fred-ii-: 那只会重命名文件一次,不会检查重命名的文件是否存在。
-
@TheBlueDog 好点;我的立场是正确的。
-
你应该检查文件扩展名,否则可能会上传
.php文件或其他恶意文件。
标签: php file if-statement rename exists