【问题标题】:PHP file upload only retaining extensionPHP文件上传只保留扩展名
【发布时间】:2016-04-28 01:00:59
【问题描述】:

对于我的网站,我有一个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>`

【问题讨论】:

标签: php html file-upload ftp


【解决方案1】:

我之前实际上并没有见过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>

【讨论】:

  • 是的,但这并不能解决我的问题:文件名只保留扩展名(无论是 .jpg 还是 .png
  • 嗯,那么你分配$name 的方式肯定有问题,因为这个脚本是按原样工作的。
猜你喜欢
  • 2017-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-26
  • 2011-06-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多