PHP - 上传多个文件

Posted

技术标签:

【中文标题】PHP - 上传多个文件【英文标题】:PHP - Uploading multiple files 【发布时间】:2011-05-09 21:31:00 【问题描述】:

我正在开发一个 wordpress 插件,我希望能够从一个表单上传多张图片。现在,当我有一张包含两张图片的表单并将其提交为空时,我的 $_FILES 数组如下所示:

Array (
    [image] => Array ( 
        [name] => Array ( 
            [1] => 
            [2] =>
        ) 
        [type] => Array ( 
            [1] => 
            [2] =>
        ) 
        [tmp_name] => Array ( 
            [1] => 
            [2] =>
        ) 
        [error] => Array ( 
            [1] => 4 
            [2] => 4
        ) 
        [size] => Array ( 
            [1] => 0 
            [2] => 0 
        ) 
    ) 
)

现在的问题是我想使用 wordpress 的上传处理程序 wp_handle_upload。它期望 $_FILES 数组作为参数,但只有一个文件。我想它只能是两个阵列深,而不是像我的三个阵列。所以我想知道是否有一种方法可以从 $_FILES 数组中一次提交一个文件。这些文件在每个数组中具有相同的键。

编辑:更改了帖子,因为我了解到 wp_handle_upload 需要 $_FILES 数组作为参数。

【问题讨论】:

您的文件输入是否恰好带有一个名称=,例如image[] 【参考方案1】:

试试:

$files = $_FILES['image'];
foreach ($files['name'] as $key => $value) 
  if ($files['name'][$key]) 
    $file = array(
      'name'     => $files['name'][$key],
      'type'     => $files['type'][$key],
      'tmp_name' => $files['tmp_name'][$key],
      'error'    => $files['error'][$key],
      'size'     => $files['size'][$key]
    );
    wp_handle_upload($file);
  

【讨论】:

这几乎让我受益匪浅,谢谢!我不得不将数组中的 $key 更改为 $x,因为那是用于递增的变量。现在唯一的问题是,当我将文件字段留空时,它仍然会通过该循环进行处理。 @Toxid:查看我的更新,您可以将整个内容包装在 if 中。 非常感谢!我正在尝试使用 ifs,但不知道该怎么做。 @Toxid if($_FILES['image']['error'] 【参考方案2】:

你不能循环遍历你的文件数组然后调用upload_handlers吗?

例如

for( $i = 1; $i <= count( $_FILES['image']['name']; $i++ ) 
    // just cguessing on the args wp_handle_upload takes
    wp_handle_upload( $_FILES['images']['tmp'][$i], $_FILES['images']['name'][$i] );

【讨论】:

好主意,我也想过这个问题。在做了一些研究之后,我意识到我在第一篇文章中错了。 wp_handle_upload 需要 $_FILES 数组作为参数,但只有一个文件。所以我猜它只能是两个数组深。

以上是关于PHP - 上传多个文件的主要内容,如果未能解决你的问题,请参考以下文章

使用PHP脚本如何上传多个文件

使用php上传ajax多个文件

如何使用 PHP、jQuery 和 AJAX 上传多个文件

php中的多个文件上传

使用多个 & php 上传文件

PHP - 上传多个文件