将FILE数据存储在会话中以供以后使用move_uploaded_file

时间:2017-07-14 07:54:51

标签: php mysql session

我不知道这是否可行,但我需要将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']++;
    }
}

这就是所谓的“视觉”

$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];

        }
    }

1 个答案:

答案 0 :(得分:2)

您无法将文件存储到会话中并在以后使用

我已在我的一个项目中实现了以下代码,其中我将文件保存到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中的其余代码

希望这有帮助