【问题标题】:How to get filename from $_FILES nested array如何从 $_FILES 嵌套数组中获取文件名
【发布时间】:2017-06-12 10:46:28
【问题描述】:

我正在尝试列出通过表单上传的图像的所有文件名,然后通过电子邮件发送。

文件上传.html:

<form method="post" action="upload.php" enctype="multipart/form-data" id="upload" >
<input type="file" name="filesupl[]" multiple id="files" />
<input type="submit" name="UploadBtn" value="Upload" class="formtext" id="UploadBtn">
</form>

上传.php:

$art_file = $_FILES['filesupl'];
$filecounter = 1;
$count = 0;
foreach ( $art_file as $i => $art_inner ){ 
                    echo $filecounter . ") " . $art_file[$i]['name'] . "<br />"; $filecounter++; 
        }
if ($_SERVER['REQUEST_METHOD'] == 'POST' and isset($_FILES['filesupl']))
    {
        $extension = pathinfo($_FILES['filesupl']['name'], PATHINFO_EXTENSION);

        // Upload files
        // loop all files
        foreach ( $_FILES['filesupl']['name'] as $i => $name )
        {
            // if file not uploaded then skip it
            if ( !is_uploaded_file($_FILES['filesupl']['tmp_name'][$i]) )
                continue;

            // skip large files
            if ( $_FILES['filesupl']['size'][$i] >= $max_size )
                continue;

            // skip unprotected files
            if( !in_array(pathinfo($name, PATHINFO_EXTENSION), $extensions) )
                continue;

            // now we can move uploaded files
            if( move_uploaded_file($_FILES["filesupl"]["tmp_name"][$i], $dir . $name) )
                $count++;
        }

    }

echo json_encode(array('count' => $count));

我尝试了多种方法来访问上传文件的“名称”(上面的代码是其中一种尝试),但无济于事。

【问题讨论】:

  • 它是一个正常的数组,有什么问题?
  • 您正试图过早地确定扩展名。 $_FILES['filesupl']['name'] 是一个数组。
  • 我正在尝试使用 foreach 在电子邮件中输出文件名,但我在访问从嵌套数组上传的每个文件的该变量时遇到问题。每次代码执行时,我都会得到一个空结果或单词“Array” 5 次。

标签: php arrays forms foreach nested


【解决方案1】:

我正在尝试列出所有上传图片的文件名...

如果您的唯一目的是获取上传文件的所有文件名,那么您的代码应该是这样的:

foreach($_FILES['filesupl']['name'] as $name){
    // echo $name . '<br />';
}

现在,如果您想重构代码并使其正常工作,请使用 for 循环,如下所示:

$count = count($_FILES['filesupl']['name']);
for($i = 0; $i < $count; ++$i){
    // if file not uploaded then skip it
    if ( !is_uploaded_file($_FILES['filesupl']['tmp_name'][$i]) )
        continue;

    // skip large files
    if ( $_FILES['filesupl']['size'][$i] >= $max_size )
        continue;

    // get file extension
    $extension = pathinfo($_FILES['filesupl']['name'][$i], PATHINFO_EXTENSION);

    // skip unprotected files
    if( !in_array($extension, $extensions) )
        continue;

    // now we can move uploaded files
    if( move_uploaded_file($_FILES["filesupl"]["tmp_name"][$i], $dir . $_FILES['filesupl']['name'][$i])){
        // file has been uploaded
    }
}

echo json_encode(array('count' => $count));

【讨论】:

  • 感谢您的建议!我已经实施了建议的第二部分。不幸的是,当我希望获得一个文件名时,我仍然收到一个空值(根据您的建议使用 foreach)。
  • @CharlieMarrero 在for 循环中您要获取文件名的位置,如何获取?请将您的代码粘贴到pastebin.com 并在此处给我它的链接。
  • Rajdeep Paul,这是我要输出文件名的区域的 pastebin 链接:pastebin.com/GsnCFqBc(这是 upload.php 页面的一部分,文件上传后)跨度>
  • @CharlieMarrero 那是因为您没有将文件名附加到$pobody。那个foreach循环应该是这样的,http://pastebin.com/uCnJ8983
  • Rajdeep Paul,感谢您指出这一点!那肯定是缺失的。但是,添加后,即使成功上传了 2 张图片,我仍然收到一封没有列出文件名的电子邮件。
猜你喜欢
  • 2017-12-23
  • 1970-01-01
  • 2023-01-28
  • 1970-01-01
  • 2018-12-23
  • 1970-01-01
  • 2017-12-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多