php多文件上传

php多文件上传,php,file-upload,for-loop,upload,Php,File Upload,For Loop,Upload,我有一个脚本,我正在制定一次上传多达10个文件。我的html中有10个独立的输入: <?php for($i=0;$i<10;++$i) { $num = $i+1; echo ' <span>'.$num.'</span><input type="file" name="photo'.$i.'" /> '; } ?> 然后

我有一个脚本,我正在制定一次上传多达10个文件。我的html中有10个独立的输入:

  <?php
    for($i=0;$i<10;++$i) {
         $num = $i+1;
         echo '
            <span>'.$num.'</span><input type="file" name="photo'.$i.'" />
              ';
     }
  ?>

然后我有我以前用过的上传器,形式稍有不同,但现在无法使用:

$path = "../path/to/folder/";
for($i = 0; $i < 20; $i++){
  $fileName = "photo". "$i";
  $filePath = "$path". "photo$i.jpg";

  if (!empty($_FILES['$fileName']['tmp_name'][$i])) {
       if (!copy($_FILES['$fileName']['tmp_name'][$i], $filePath)) {
            echo "failed to save '.$filePath.'";
        }
       chmod($filePath, 0644);
     }
 }
$path=“../path/to/folder/”;
对于($i=0;$i<20;$i++){
$fileName=“照片”。$i”;
$filePath=“$path”。“photo$i.jpg”;
如果(!空($_文件['$fileName']['tmp_名称'][$i])){
如果(!复制($_文件['$fileName']['tmp_名称][$i],$filePath)){
echo“未能保存“.$filePath.”;
}
chmod($filePath,0644);
}
}
在这个脚本的一个工作版本中,我剪切了for循环,并对每个上传单独编号(我有一段没有循环的代码,每段代码都有自己的编号)。这很有效,但看到这样的代码真的很难看。有没有办法让这一切顺利进行

更新:

还是没什么运气我很感激你的帮助。我认为我的问题在于$\u文件数组没有正确填充,如下所示:

已将HTML更改为:

  <?php
    for($i=0;$i<10;++$i) {
         $num = $i+1;
         echo '
            <span>'.$num.'</span><input type="file" name="photo[]" />
              ';
     }
  ?>

并将上载程序脚本添加到:

$path = "../path/to/folder/";
for($i = 0; $i < 20; $i++){
  $fileName = "photo". "$i";
  $filePath = "$path$fileName.jpg";

  if (!empty($_FILES["photo"]["tmp_name"][$i])) {
       if (!copy($_FILES["photo"]["tmp_name"][$i], $filePath)) {
            echo "failed to save '.$filePath.'";
        }
       chmod($filePath, 0644);
     }
 }
$path=“../path/to/folder/”;
对于($i=0;$i<20;$i++){
$fileName=“照片”。$i”;
$filePath=“$path$fileName.jpg”;
如果(!空($_文件[“照片”][“tmp_名称”][$i])){
如果(!复制($_文件[“照片”][“tmp_名称”][$i],$filePath)){
echo“未能保存“.$filePath.”;
}
chmod($filePath,0644);
}
}
我认为(部分)你的问题在于报价。在循环中使用单引号会导致变量无法计算。请尝试使用下面的代码。可能还有其他一些问题,但这应该可以解决问题的一个方面

$path = "../path/to/folder/";
for($i = 0; $i < 20; $i++){
  $fileName = "photo". $i;
  $filePath = "$path". "$fileName.jpg";

  if (!empty($_FILES["$fileName"]['tmp_name'][$i])) {
       if (!copy($_FILES["$fileName"]['tmp_name'][$i], $filePath)) {
            echo "failed to save $filePath";
        }
       chmod($filePath, 0644);
     }
 }
$path=“../path/to/folder/”;
对于($i=0;$i<20;$i++){
$fileName=“photo”。$i;
$filePath=“$path”。$fileName.jpg”;
如果(!empty($_FILES[“$fileName”]['tmp_name'][$i])){
如果(!copy($\u FILES[“$fileName”]['tmp\u name'][$i],$filePath)){
echo“未能保存$filePath”;
}
chmod($filePath,0644);
}
}
我认为(部分)你的问题在于报价。在循环中使用单引号会导致变量无法计算。请尝试使用下面的代码。可能还有其他一些问题,但这应该可以解决问题的一个方面

$path = "../path/to/folder/";
for($i = 0; $i < 20; $i++){
  $fileName = "photo". $i;
  $filePath = "$path". "$fileName.jpg";

  if (!empty($_FILES["$fileName"]['tmp_name'][$i])) {
       if (!copy($_FILES["$fileName"]['tmp_name'][$i], $filePath)) {
            echo "failed to save $filePath";
        }
       chmod($filePath, 0644);
     }
 }
$path=“../path/to/folder/”;
对于($i=0;$i<20;$i++){
$fileName=“photo”。$i;
$filePath=“$path”。$fileName.jpg”;
如果(!empty($_FILES[“$fileName”]['tmp_name'][$i])){
如果(!copy($\u FILES[“$fileName”]['tmp\u name'][$i],$filePath)){
echo“未能保存$filePath”;
}
chmod($filePath,0644);
}
}

您正在使用
$i
两次:

$_FILES["$fileName"]["tmp_name"][$i]

[$i]
部分对我来说毫无意义:您已经通过
$fileName
访问了每个元素。我认为你需要简单地摆脱
[$I]

您正在使用
$i
两次:

$_FILES["$fileName"]["tmp_name"][$i]

[$i]
部分对我来说毫无意义:您已经通过
$fileName
访问了每个元素。我认为你需要简单地摆脱
[$I]

你把它复杂化了
没有比这更容易的了
只需查看超过$\u个文件

foreach ($_FILES as $file) {
  $filePath = $path. "photo".($i++).".jpg";
  if (!$file['error']) {
    move_uploaded_file($file['tmp_name'], $filePath));
  }
}
就这些
对于第一个命名约定。

您已经将其过度复杂化了
没有比这更容易的了
只需查看超过$\u个文件

foreach ($_FILES as $file) {
  $filePath = $path. "photo".($i++).".jpg";
  if (!$file['error']) {
    move_uploaded_file($file['tmp_name'], $filePath));
  }
}
就这些

对于第一个命名约定。

结合jsuggs和Pekka的答案,我可以看到Pekka修复了您的引用错误,但没有提及它。另外,请检查是否实际设置了
$\u FILES[$fileName]
。否则你会得到一个错误:
如果(isset($\u FILES[$fileName])…
结合jsuggs和Pekka的答案,我可以看到Pekka修复了你的报价错误,但没有提及它。另外,请检查
$\u FILES[$fileName]
是否实际设置了。否则,您将得到一个错误:
if(isset($\u FILES[$fileName]))…
您可能已经提到您修复了他的引用错误wrt<代码>“$fileName”->“$fileName”哪个。。。最后可能是
$fileName
@Kristofer老实说,我甚至没有注意到-我完全出于习惯而替换了它:)很好,干杯。@Pekka在没有注意到的情况下修复了错误?那会让我的工作变得轻松多了。谢谢你的快速回复!但是我已经删除了i并修复了引号,但是照片仍然没有上传:-(@pekka它向我显示了一个空数组--字面意思是“array()”:-/你应该提到你修复了他的引号错误。
“$fileName”->“$fileName”
最后可能是
$fileName
@Kristofer老实说,我甚至没有注意到-我完全出于习惯而替换了它:)很好,干杯。@Pekka在没有注意到的情况下修复了错误?那会让我的工作变得轻松多了。谢谢你的快速回复!但是我已经删除了i并修复了引号,但是照片仍然没有上传:-(@pekka它向我显示了一个空数组--字面上是“array()”:-/不确定要在哪里实现它,我剪切了所有的$\u文件,并将此代码放在for($i=0;$i<20;$i++)下但仍然无法获得任何实际上传的内容:-/thanks@thomas这是您所需要的全部代码。尽管如果$\u FILES数组为空,它显然无法工作。不确定在何处实现此功能,我将所有$\u文件内容剪切,并将此代码放在($I=0;$I<20;$I++)下但仍然无法获得任何实际上传的内容:-/thanks@thomas这就是您需要的全部代码。尽管如果$\u FILES数组为空,它显然无法工作