2016-04-28 111 views
0

对于我的网站,我有一个PHP图片文件上传系统,以便用户可以上传自己的图片。这些照片存储在/images/中,我已将其文件许可权更改为777。当我测试上传文件,它的工作原理,但文件只保持.jpg扩展,而不是前缀:PHP文件上传只保留扩展名

<?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>` 
+0

阅读'rename()'手册http://php.net/manual/en/function.rename.php并查看** User Contributed Notes **下的第一个示例。 –

+5

您还标记为['ftp'](http://stackoverflow.com/questions/tagged/ftp),但未能在此处看到相关性。 –

回答

0

我还没有真正见过rename,但只是想它,我承认它的行为没有按这看起来不像我期望的那样。改为尝试move_uploaded_file

最重要的是,我注意到您正在检查您接受的唯一图像格式是pngjpeg,但是您将它们全部重命名为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> 
+0

是的,但是这并没有解决我的问题:文件名只保留扩展名(无论是'.jpg'还是'.png') – Felix

+0

嗯,那么分配'$ name'的方式肯定有问题因为这个脚本按原样工作。 –

相关问题