php文件上传不同类型的文件

时间:2016-06-07 10:48:13

标签: php file-upload

我尝试使用以下函数在php上传文件:

public function fileUpload($FILES){
    $num_of_uploads = 1;
    $max_file_size = 1048576; //can't be larger than 1 MB

    $T = array ();
    foreach($_FILES["file"]["error"] as $key=>$value){

        if($_FILES["file"]["name"][$key] != ""){

            if($value == UPLOAD_ERR_OK){

                $v = array ();

                $origfilename = $_FILES["file"]["name"][$key];
                $filename = explode(".", $_FILES["file"]["name"][$key]);
                $filenameext = $filename[count($filename) - 1];

                $v['name'] = $filename[0];
                $v['extension'] = $filename[1];
                $v['type'] = $_FILES["file"]["type"][$key];

                unset($filename[count($filename) - 1]);
                $filename = implode(".", $filename);
                $filename = "file__" . time() . "." . $filenameext;

                if($_FILES["file"]["size"][$key] < $max_file_size){
                    $v['content'] = file_get_contents($_FILES["file"]["tmp_name"][$key]);
                    $T[] = $v;
                }else{
                    throw new Exception($origfilename . " file size inaccepted!<br />");
                }

            }else{
                throw new Exception($origfilename . " Error of upload <br />");
            }
        }
    }
    return $T;
}

此函数适用于txt类型,但是当我测试pdf或gif或jpg时,它会返回一个损坏的文件。

2 个答案:

答案 0 :(得分:3)

据我所知,file_get_contents()适用于text/html类型。 但是,对于其他文件类型,您应首先解析其文本内容,以便在进一步处理中使用它。尝试在记事本中打开任何.pdf以查看其文字内容。

出于上传目的,请在您的周期中使用move_uploaded_file(),如下所示:

move_uploaded_file($_FILES["file"]["tmp_name"][$key], $filename);

当然,不试图从上传的文件中获取文字内容。

答案 1 :(得分:1)

要下载文件,您需要设置标题。因此,在函数开始时,尝试为png或jpeg文件设置以下任何标题:

//For png file
header("Content-Type: image/png");
//For jpeg file
header("Content-Type: image/jpeg");