2016-06-07 68 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"); 
相關問題