两个循环和move_uploaded_file,我有点困惑


Two loops and move_uploaded_file, I am a bit confused

共有两页。第1页包含:

第1页:

$_SESSION['temporary'][$i] = $_FILES['img']['tmp_name'][$i];
$_SESSION['image'][$i] = $_FILES['img']['name'][$i];

第2页包含:

第2页:

for($i=0;$i<count($_SESSION['temporary']);$i++)
{
    echo '<br/>'.$_SESSION['temporary'][$i];
}
for($i=0;$i<count($_SESSION['image']);$i++)
{
    $path = $pre_path.'/'.basename($_SESSION['image'][$i]);
    echo '<br/>'.$_SESSION['image'][$i];
}

我想做的是使用move_uploaded_file这样的函数:

move_uploaded_file($_SESSION['temporary'][$i], $path);

我不能在第二个循环中使用这个函数。因为它不包含

$_SESSION['temporary'][$i]

从第一个循环。

我为什么要这样写剧本?因为我的脚本在以下步骤中工作:

  1. 第0页:选择类别和属性,并上传图像
  2. 第1页:显示所选类别和base64编码的图像
  3. 第2页:将所有内容插入数据库

我真的不介意这么做。如果有人帮我,我会很高兴的。当然,我接受了答案,并竖起大拇指。如果你觉得它更容易,你可以使用foreach循环代替:

foreach($_SESSION['temporary'] as $temporary)
{
    echo '<br/>'.$temporary;
}
foreach($_SESSION['image'] as $image)
{
    $path = $pre_path.'/'.basename($image);
    echo '<br/>'.$image;    
}

page2本身上,您可以上传如下文件:

$num_of_files = count($_SESSION['temporary']); // or count($_SESSION['image'])
for($i=0; $i < $num_of_files; $i++){
    echo '<br/>'.$_SESSION['temporary'][$i];
    echo '<br/>'.$_SESSION['image'][$i];
    $path = $pre_path.'/'.basename($_SESSION['image'][$i]);
    move_uploaded_file($_SESSION['temporary'][$i], $path);
}

显然我错了,你不能上传那样的文件。

根据手册,

move_uploaded_file()函数检查以确保filename指定的文件是有效的上传文件(意味着它是通过PHP的HTTPPOST上传机制上传的)。如果文件有效,它将被移动到目标指定的文件名。

$_FILES数组仅保存有关此请求中已上载的文件的信息。如果您没有将该文件保存在同一请求中的其他位置,PHP将在请求结束时删除该文件。您不能简单地将$_FILES['uploadfoto']['tmp_name']保存到会话中,然后期望文件稍后仍在那里,因为它不会是。