对于我的网站,我有一个PHP图像文件上传系统,以便用户可以上传自己的图片。这些图片存储在/images/
中,我已将其文件权限更改为777
。当我测试上传文件时,它可以工作,但该文件仅保留.jpg
扩展名而不是前缀:
<?php
$name= 'filename';
$newname= '/images/'. $name. '.jpg';
if(isset($_FILES['image'])){
$errors= array();
$file_name = $_FILES['image']['name'];
$file_size =$_FILES['image']['size'];
$file_tmp =$_FILES['image']['tmp_name'];
$file_type=$_FILES['image']['type'];
$file_ext=strtolower(end(explode('.',$_FILES['image']['name'])));
$expensions= array("jpeg","jpg","png");
if(in_array($file_ext,$expensions)=== false){
$errors[]="extension not allowed, please choose a JPEG or PNG file.";
}
/*if($file_size > 2097152){
$errors[]='File size must be excately 2 MB';
}*/
if(empty($errors)==true){
rename($file_tmp, $newname);
echo "Success";
}else{
print_r($errors);
}
}
?>
<form action="" method="POST" enctype="multipart/form-data">
<input type="file" name="image" />
<input type="submit"/>
</form>`
我以前实际上没有见过rename
,但只是尝试一下,我承认它的行为似乎不是我所期望的。请尝试move_uploaded_file
。
最重要的是,我注意到您正在检查您接受的唯一图像格式是 png
和 jpeg
,但您将它们全部重命名为 jpg
.为什么?并非所有图像查看器都会打开带有jpg
扩展名的png
。
<?php
$name= 'filename';
$newname= '/images/'. $name;//. '.jpg'; // why wouldn't you preserve the correct extension? i.e. $file_ext
if(isset($_FILES['image'])){
$errors= array();
$file_name = $_FILES['image']['name'];
$file_size =$_FILES['image']['size'];
$file_tmp =$_FILES['image']['tmp_name'];
$file_type=$_FILES['image']['type'];
$file_ext=strtolower(end(explode('.',$_FILES['image']['name'])));
$expensions= array("jpeg","jpg","png");
if(in_array($file_ext,$expensions)=== false){
$errors[]="extension not allowed, please choose a JPEG or PNG file.";
}
/*if($file_size > 2097152){
$errors[]='File size must be excately 2 MB';
}*/
if(empty($errors)==true){
// // // use move_uploaded_file() instead // // //
//rename($file_tmp, $newname);
move_uploaded_file($file_tmp, "$newname.$file_ext");
echo "Success";
}else{
print_r($errors);
}
}
?>
<form action="" method="POST" enctype="multipart/form-data">
<input type="file" name="image" />
<input type="submit"/>
</form>