2017-07-14 74 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 –