2016-06-07 110 views
1

我尝试使用下面的函数上传的PHP文件中: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,它会返回一个损坏的文件。

+0

检查您的php.ini文件的最大文件上传大小和最大文章大小。确保上传大小不超过 – Krunal

+0

我没有问题的文件大小,我正在测试70Ko文件,它不起作用 – phoenix

+0

你正在得到什么错误? – Krunal

回答

3

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

对于上载的目的,在你的循环使用move_uploaded_file(),像这样:

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

当然,没有试图从上传的文件文本内容。

+0

move_uploaded_file函数必须在第二个参数文件目的地,而不是文件名, ** move_uploaded_file($ _ FILES ['Filedata'] ['tmp_name'],$ file_src); ** 这里我没有保存文件在一个特定的目的地 – phoenix

+0

当然,但文件名将工作作为当前工作目录的目标。如果由于某种原因想要使用文件内容进行直接下载,则需要根据当前文件扩展名正确设置“Content-type”标头。 – Nevertheless

1

要下载文件,您需要设置标题。所以,在功能的开始尝试设置任何下面的标题为PNG或JPEG文件:

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