2016-04-28 73 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'的方式肯定有問題因爲這個腳本按原樣工作。 –

相關問題