2017-07-14 144 views
0

我不知道這是否可能,但我需要將FILE數據存儲到會話中,以便將來可以使用它的信息將圖像存儲到服務器中。將FILE數據存儲在會話中供以後使用move_uploaded_file

目前拖放操作是直接將數據存儲到服務器。

基本上我有一個表格,用戶可以填寫產品的信息,然後添加圖像。一旦用戶輸入需要的信息並按提交,這些信息將被存儲到創建產品ID的mysql中。與該產品的關鍵,我會用它來命名圖像,如product_ID + product_namme + image number.jpg問題是我無法找到一種方法來存儲FILE數據到這一點,我試過使用會話,但是當我重申它的價值是空白。

PHP 此版本的工作原理,但直接存儲數據,所以我不能重命名文件。這是發生之前

foreach($_FILES['file']['name'] as $position => $name){ 
    if(move_uploaded_file($_FILES['file']['tmp_name'][$position], '../ProductImages/'.$name)); 
} 

這與它的會話的代碼,但是當我贊同這些會議用戶按下submited後,他們是空白。如果我在這個代碼下面回顯,它會有數據。有什麼我失蹤了嗎?

if(!empty($_FILES['file']['name'][0])){ 
    $_SESSION['imgAmount'] = 1; 
    foreach($_FILES['file']['name'] as $position){ 
     $_SESSION['tmpVal'][$position] = $_FILES['file']['tmp_name'][$position]; 
     $_SESSION['imgAmount']++; 
    } 
} 

這就是SEESION被稱爲

$i = 0; 
if(isset($_SESSION['tmpVal'])){ 
     while($i < $_SESSION['imgAmount']){ 
      move_uploaded_file($_SESSION['tmpVal'][$i],'../ProductImages/'.$imgID . 'child' . $i . '.jpg'); 
      $i++; 
      echo "test0"; 
      echo "<br>" . $_SESSION ['tmpVal']; 
      echo "<br>" . $_SESSION ['imgAmount']; 
      echo "<br>" . $_SESSION ['tmpVal'][0]; 
      echo "<br>" . $_SESSION ['tmpVal'][1]; 

     } 
    } 
+0

數組中的信息的會話代碼只是臨時使用。將它存儲在會話中是絕對沒有意義的。將所需的那些方面保存到數據庫中,將臨時文件移到最終目標。爲此,你不應該使用客戶端提供的文件名!這是一個安全漏洞!而是沿着你自己勾畫的方法生成一個內部文件名。只要改變你將你的調用中的目標路徑連接到'move_uploaded_file()'的方式。 – arkascha

+0

你會錯誤地回答這個問題。讓drag'n'drop _not_自動上傳文件並將其與其他信息一起發佈,而不是之前有關安全性的評論。如果文件很大,當用戶提交表單時上傳可能甚至不完整。 –

+0

我想過把它移動到數據庫的臨時文件,一旦我將所有其他信息從用戶存儲到數據庫,獲取product_ID並將其與實際產品數據一起再次存儲。但是,我雖然在數據庫上存儲臨時數據的效率並不高,因爲我將不得不繼續傳輸數據,但是不會減慢連接速度? –

回答

1

您不能將文件存儲到會話,並隨後將

我已經在我的項目中,我節省1實現下面的代碼將文件複製到1個位置,然後滿足條件我將它們複製到實際目標位置並從臨時位置刪除

//Initial storing 
for ($i = 0; $i < count($_FILES['files']['name']); $i++) 
     { 
      if ($_FILES['files']['error'][ $i ] == 0) 
      { 
       $tmpName = $_FILES['files']['tmp_name'][ $i ]; 
       $name = $_FILES['files']['name'][ $i ]; 
       $location = "temp/"; 

       move_uploaded_file($tmpName, $location . $name); 
      } 
     } 
session(['filesList' => $_FILES]); 

//Final moving to the actual target location 

$fileList = session('filesList'); 
if (count($fileList['files']['name']) > 0) 
     { 
      for ($i = 0; $i < count($fileList['files']['name']); $i++) 
      { 
       if ($fileList['files']['error'][ $i ] == 0) 
       { 
        $name = $fileList['files']['name'][ $i ]; 

        $transferFile = "temp/" . $name; 

        $location[] = "files/" . $userId . $name; 

        copy($transferFile, $location[ $i ]); 
        unlink('temp/' . $name); 
       } 
      } 
     } 

所以基本上,除了這是在laravel你可以使用代碼的其餘部分在PHP核心以及

希望這有助於

+0

函數'session()'定義在哪裏? – Scuzzy

+0

這是laravel定義會話的方式,但您可以在其位置使用$ _SESSION –