【发布时间】:2017-12-19 05:47:59
【问题描述】:
我不知道这是否可行,但我需要将 FILE 数据存储到会话中,以便将来使用其信息将图像存储到服务器中。
目前拖放正在将数据直接存储到服务器。
基本上我有一个表单,用户可以在其中填写产品信息,然后添加图像。一旦用户输入所需的信息并按下提交,这些信息将被存储到创建产品 ID 的 mysql 中。使用该产品密钥,我将使用它来命名图像,例如 product_ID + product_namme + image number.jpg 问题是到目前为止我找不到存储文件数据的方法,我已经尝试过使用会话,但是当我回显它的值时,它的值是空白的。
PHP 此版本有效,但直接存储数据,因此我无法重命名文件。这发生在之前
foreach($_FILES['file']['name'] as $position => $name){
if(move_uploaded_file($_FILES['file']['tmp_name'][$position], '../ProductImages/'.$name));
}
这是其中包含会话的代码,但是当我在用户按下提交后回显这些会话时,它们是空白的。如果我在此代码下方回显,它将有数据。我有什么遗漏吗?
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];
}
}
【问题讨论】:
-
该数组中的信息仅供临时使用。将它存储在会话中绝对没有意义。将您需要的那些方面保存到数据库中,将临时文件移动到最终目的地。为此,您应该不使用客户端提供的文件名!那是安全漏洞!而是按照您自己绘制的方法生成一个内部文件名。只需将调用中连接目标路径的方式更改为
move_uploaded_file()。 -
你做错了。使拖放 not 自动上传文件并将其与其余信息一起发布 + 前面的评论所说的安全性。如果文件很大,在用户提交表单时,上传甚至可能都没有完成。
-
我考虑将它作为临时文件移到数据库中,一旦我将用户的所有其他信息存储到数据库中,获取 product_ID 并再次将其与实际产品数据一起存储。但是我虽然在数据库上存储临时数据并没有那么高效,因为我必须不断传输数据,这不会减慢连接速度吗?
-
关于客户端文件名是的,我知道我只是为了举例目的而保留在那里,这不是最终的工作。
-
如何将它一起发布需要他们上传图像?发布表单后,将信息存储在您的数据库中,获取 ID,如果帖子包含图像,则处理上传。如果没有,不用担心......