多维数组中的多个文件上传

2023-12-10

我有一个 php 表单,行数未知,用户可以在其中上传文件。为此,我使用二维数组。

<form action="upload_file_module.php" method="post" enctype="multipart/form-data">
<? $i = 0; ?>
<table>
    <tr>
        <td>
            <input type="hidden" name="row[<? echo $i; ?>][row_name]" value = "one"/> One
        </td>
        <td>
            <input type="file" name="row[<? echo $i; ?>][fileToUpload]" >
        </td>
        <? 
            $i++;
        ?>
    </tr>

    <tr>
        <td>
            <input type="hidden" name="row[<? echo $i; ?>][row_name]" value = "two"/> Two
        </td>
        <td>
            <input type="file" name="row[<? echo $i; ?>][fileToUpload]" >
        </td>
        <? 
            $i++;
        ?>
    </tr>
</table>    

<input type="submit" value="Upload" name="submit">

所有文件应保存在不同的文件夹中。

<?php
$unique_id = "folder";
$unique_id = $unique_id . '/';
foreach ( $_POST['row'] as $val )   {

    $target_dir = $unique_id;
    $target_dir = $target_dir . "/" . $val. "/";
    if (!file_exists($target_dir)) {
        mkdir($target_dir, 0777, true);
    }

    echo '<table>';
    echo '<tr>';
    echo '<td>', $val['row_name'], '</td>';
    echo '<td>', $val['fileToUpload'], '</td>';
    echo '</tr>';
    echo '</table>';

    $target_file = $target_dir . basename($_FILES[$val['fileToUpload']]["name"]);
    $uploadOk = 1;
    $imageFileType = pathinfo($target_file,PATHINFO_EXTENSION);
    // Check if image file is a actual image or fake image

    // Check if file already exists
    if (file_exists($target_file)) {
        echo "Sorry, file already exists.";
        $uploadOk = 0;
    }
    // Check file size
    if ($_FILES["fileToUpload"]["size"] > 900000000) {
        echo "Sorry, your file is too large.";
        $uploadOk = 0;
    }

    // Check if $uploadOk is set to 0 by an error
    if ($uploadOk == 0) {
        echo "Sorry, your file was not uploaded.";
    // if everything is ok, try to upload file
    } else {
        if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) {
            echo "The file ". basename( $_FILES["fileToUpload"]["name"]). " has been uploaded.<br>";
        } else {
            echo "Sorry, there was an error uploading your file.<br>";
        }
    }      
}

但实际上它没有看到任何文件,输出如下:

one

抱歉,文件已存在。抱歉,您的文件未上传。

two

抱歉,文件已存在。抱歉,您的文件未上传。


除了评论中的内容之外,还有一些需要更改的内容。主要问题是:

  1. 您试图将两个文件和发布数据放入一个数组中,当两者都$_POST and $_FILES就 PHP 本质而言,它们是完全独立的实体。所以你最终会尝试访问单个数组row当实际上有两个时row这两个超全局变量中的数组。
  2. Your $target_file从未被宣布过,而你的$target_dir有太多斜杠。
  3. 该项目1让您访问$val错误的方法。

这些是我提出的最终更正,保留了适合您自己的环境的逻辑。每个部分的解释都在代码中注释了。

HTML 表单

<!DOCTYPE html>
<html>
<head></head>
<body>
	<form action="upload.php" method="post" enctype="multipart/form-data">
            <table>
	<?php $counter = 2; // number of fields you want to be printed
	for($i = 0; $i < $counter; $i++): // do proper counting ?>
                <tr>
			<td>
				<input type="hidden" name="row[]" value="<?php echo $i; ?>"/> File:
			</td>
			<td>
				<input type="file" name="row[]" >
			</td>
		</tr>
	<?php endfor; ?>
	    </table>
	    <input type="submit" value="Upload" name="submit">
	</form>
</body>
</html>

PHP 后处理脚本

<?php
    $unique_id = "upload"; // just changed to reproduce
    $unique_id = $unique_id . '/';
    foreach ($_POST['row'] as $val)   {

        $target_dir = $unique_id;
        $target_file = $_FILES['row']['name'][$val]; //actually defining this var
        $target_dir = $target_dir . $val. "/"; // no need to index assoc nor '/'
        if (!file_exists($target_dir)) {
            mkdir($target_dir, 0777, true);
        }

        $imageFileType = pathinfo($target_dir,PATHINFO_EXTENSION);
        // Check if image file is a actual image or fake image

        // Check if file already exists
        if (file_exists($target_file)) {
            die("Sorry, file already exists."); // die if error
        }
        // Check file size
        if ($_FILES['row']['size'][$val] > 900000000) { // using the proper index reference for file
            die("Sorry, your file is too large."); //die if error
        }

        // Check if there are error msg in $_FILES
        if ($_FILES['row']['error'][$val] != 0) {
            die("Sorry, your file was not uploaded."); // die if error
            // if everything is ok, try to upload file
        } else {
            // point your move_files with the final name of the actual file to be moved
            if (move_uploaded_file($_FILES['row']['tmp_name'][$val], $target_dir.'/'.$_FILES['row']['name'][$val])) {
                echo "The file ". basename($_FILES['row']['name'][$val]). " has been uploaded.<br>";
            } else {
                die("Sorry, there was an error uploading your file.");
            }
        }
    }

最终输出(上传两个虚拟文件后)

Array
(
    [row] => Array
        (
            [0] => 0
            [1] => 1
        )

    [submit] => Upload
)
Array
(
    [row] => Array
        (
            [name] => Array
                (
                    [0] => dummyfile1.docx
                    [1] => dummyfile2.mpp
                )

            [type] => Array
                (
                    [0] => application/vnd.openxmlformats-officedocument.wordprocessingml.document
                    [1] => application/vnd.ms-project
                )

            [tmp_name] => Array
                (
                    [0] => C:\Windows\Temp\php73DA.tmp
                    [1] => C:\Windows\Temp\php73DB.tmp
                )

            [error] => Array
                (
                    [0] => 0
                    [1] => 0
                )

            [size] => Array
                (
                    [0] => 0
                    [1] => 180224
                )

        )

)
The file dummyfile1.docx has been uploaded.
The file dummyfile2.mpp has been uploaded.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

多维数组中的多个文件上传 的相关文章

  • zip 文件的校验和

    我目前正在开发一个工具 它上传一组文件 然后使用 md5 校验和将文件与上一批上传的文件进行比较 并告诉您哪些文件已更改 对于常规文件 这工作正常 但某些上传的文件是 zip 存档 即使其中的文件相同 它们几乎总是会发生变化 有没有一种方法
  • 为什么这会返回资源 id #2? [复制]

    这个问题在这里已经有答案了 可能的重复 我如何从 PHP 中的 MySql 响应中 回显 资源 id 6 https stackoverflow com questions 4290108 how do i echo a resource
  • 负载平衡集群中的 PHP 会话 - 如何?

    好的 我得到了这个完全罕见的负载平衡 PHP 网站的独特场景 令人遗憾的是 它过去没有进行负载平衡 现在我们开始遇到问题 目前唯一的问题是 PHP 会话 当然 一开始没有人想到这个问题 因此 PHP 会话配置保留为默认值 因此 两台服务器都
  • 第三个下拉菜单不从数据库填充

    我有以下 Index php
  • 通过 facebook graph API 检索 facebook 用户的邮政编码

    我正在尝试使用 facebook graph API 检索用户的邮政编码 我正在使用以下代码 代码在php ini中 facebook new Facebook array appId gt APP ID secret gt APP SEC
  • 如何在类似 MVC 的页面中加载基于漂亮 URL 的类?

    我想请教一些关于如何解决这个问题的提示 我正在尝试构建自己的 MVC 网站 我了解了 URL 的基础知识 http example com blog cosplay cosplayer expo today 博客 gt 控制器cosplay
  • 在 Symfony 序列化中更改序列化属性名称

    我正在使用 Symfony 序列化器 效果很好 use Symfony Component Serializer Annotation Groups Groups default notification public function g
  • 使用先前的反向引用作为命名捕获组的名称

    有没有办法使用对先前捕获组的反向引用作为捕获组的名称命名捕获组 这可能不可能 如果不可能 那么这就是一个有效的答案 下列 data description some description preg match data matches p
  • PHP:读取字体文件的 TrueType/OpenType 元数据

    如何阅读字体详细信息 例如 字体在其元数据中包含版权 姓氏 设计者 版本等信息 我还希望脚本能够计算文件中的字形数量 并返回字体支持的语言 例如 典型的字体可能包含西方语言 瑞典语和罗马语言支持 并具有数百个字形 它应该支持 truetyp
  • 标准转换:数组到指针的转换

    这是ISO的观点 标准转换 数组到指针的转换 4 2 1 数组 类型的左值或右值 N T 或 未知边界的数组 T 可以转换为右值 类型为 指向 T 的指针 结果是 指向第一个元素的指针 数组 如果可能的话 任何人都可以用一个示例程序来解释这
  • 如何在 yii2 中使用两个不同的模型登录或切换身份类别?

    我想允许用户从两个不同的模型登录 配置文件 user gt identityClass gt app models User one more class here enableAutoLogin gt false authTimeout
  • fgetcsv 在特定行打开?

    有没有办法使用 fgetcsv 在特定行上打开 我有一个非常大的 csv 想通过 ajax 一次运行大约 100 行 我可以轻松停止 while 循环 但如何在特定行上打开 或者这是不可能的 从第 100 行开始读取没有简单的方法 但您可以
  • apache_request_headers() 与 $_SERVER

    据我所知 apache request headers 提供与以下相同的信息 SERVER 但按键略有不同 为什么有人应该使用apache request headers 而不仅仅是从那里获取这些信息 SERVER 我在 Centos 上使
  • 自动建议 php 的 ajax

    我有一个 html 表单 php 脚本和 jquery 我需要一个 ajax 代码来从我的 php 脚本中进行自动建议 以下是代码 表单 html
  • Joomla 页面中的自定义 php 代码

    我正在尝试将 Joomla 1 5 9 页面中的表源从页面中的硬编码 html 更改为从 SQL 数据库获取信息 执行此操作的正确方法是什么 创建一个新的模型或组件并以某种方式在页面中使用它 我找到了这些 http docs joomla
  • 如何获得n个具有不同元素数量的数组的所有可能组合?

    我有一些在编程时未知的数组数量 也许是 3 或 4 或 7 每个数组都有一些元素 即 a 1 2 3 4 b 6 7 5 2 1 c 22 4 6 8 4 8 5 4 d e f g 我想通过从每个数组中采样一个数字来获得所有可能的组合 例
  • phpunit测试调用其他需要mock的类方法的方法

    我正在尝试创建一个非常标准的单元测试 在其中调用一个方法并断言它的响应 但是我正在测试的方法调用同一类中的另一个方法 该方法做了一些繁重的工作 我想模拟该方法 但仍按原样执行我正在测试的方法 仅使用从调用另一种方法返回的模拟值 我简化了示例
  • 比较数组中的文件、从文本文件中删除行、函数、日志记录

    所以我创建了这两个数组 Approved Shares 和 Current Shares Reads Approvedshare txt and makes the txt file into an array public objFSO
  • php curl 使用 GET 发送变量 奇怪的结果

    我正在尝试调用远程站点上页面中的网址 决定使用curl 在远程站点上 url 变量显示为 REQUEST Array var1 gt val1 amp var2 gt val2 amp var3 gt val3 被调用的url是 http
  • Laravel $request->file() 返回 null

    尝试在后端使用 Laravel 上传文件时遇到问题 Issue Laravel request gt file 方法返回 null Setup 我使用以下方法构建了一个 AJAX 请求超级代理人 https github com visio

随机推荐

  • ASP.NET MVC6 中的实体框架7对同一个表的多个外键

    您好 我有同样的问题 这里有一篇旧文章 那里提供的解决方案在带有 EF7 的 MVC 6 中对我不起作用很简单 public class Match Key public int MatchId get set public DateTim
  • Pytorch - 运行时错误:尝试再次向后浏览图表,但缓冲区已被释放

    我一直遇到这个错误 运行时错误 尝试再次向后浏览图形 但缓冲区已被释放 第一次向后调用时指定retain graph True 我在 Pytorch 论坛中搜索过 但仍然找不到我在自定义损失函数中做错了什么 我的模型是 nn GRU 这是我
  • Tor Stem - 前往俄罗斯,有爱情联系问题

    我正在尝试获取带着爱去俄罗斯教程来自 Stem 项目的工作 from io import StringIO import socket import urllib3 import time import socks SocksiPy mod
  • 让方法运行或引发异常的 Python 装饰器

    我需要一个装饰器 它接受一个参数并检查 基于一些简单的逻辑 是否应该允许该方法运行或引发异常 class One obj trend trend myDecorator self trend def click button self cl
  • 在 Sankey 工具提示中显示边缘信息

    我正在使用 networkD3 包中的 sankeyNetwork 来创建可视化 我想为每条边分配一个名称 ID 以便它出现在工具提示中 这可以通过 sankeyNetwork 或 networkD3 包中的任何其他函数来完成吗 这在技术上
  • php、jquery 只有第一个 id 工作正常

    我在 php 中有以下代码 代码经过编辑以便于理解 while row mysql fetch array biznis div div img src social images avatar empty avatar full jpg
  • 如何将所有网络流量重定向到特定页面?

    有没有办法将我网站的所有流量重定向到特定页面 我的免费主机确实支持 PHP 不确定这是否适合于此 谢谢 如果您的主机基于 Apache 并支持模组重写 用那个 例如 WordPress 典型的重写 将对不存在的文件 文件夹的请求重定向到in
  • std::数组的向量

    以下声明通过编译检查 int arr 3 vector
  • 如何将 Perlin 噪声值标准化到范围 [0, 1]?

    我正在使用 numpy 数组来保存柏林噪声值 有人告诉我 二维数组中的柏林噪声值分别在 0 7 0 7 范围内 但这似乎并非如此 至少对于凯斯曼来说不是 noise 库 当我调整八度 持久性和空白度的参数时 我会使用不同的库 但我找不到任何
  • Powerpoint VBA - 更改配色方案

    我需要通过 VBA 代码将演示文稿的配色方案更改为 Office 2007 2010 我怎样才能做到这一点 我尝试了类似下面的方法 但似乎不起作用 ActivePresentation ColorSchemes Add ActivePres
  • 如何在 laravel 5.3 中显示当前日期的日期名称?

    我想在 laravel 5 3 中打印当前日期的名称 我可以通过以下方式获取当前日期 上面的代码打印 25 但我希望它打印星期四 我应该怎么做 Try this
  • 有没有办法在密码文本模式下设置 ASP.NET 文本框密码字符?

    我希望当用户输入文本时 它应该显示 而不是一个简单的星号 有没有办法 在win forms的TextBox中有一个属性PasswordChar 它在web中有何相似之处 不 这是特定于浏览器的 也许你可以用 javascript 来伪造这个
  • 如何在 Delphi XE 中国际化我的应用程序?

    我正在使用 Delphi 中包含的翻译管理器 xe8 但在旧版本中应该相同 我转到 Projet gt 语言 gt 添加 选择英语 然后我翻译文本 这里是按钮 我全部更新并编译 我得到了 exe 和 enu 文件 它是法语的 当我转到 Pr
  • matlab中的KNN算法

    我正在研究拇指识别系统 我需要实现 KNN 算法来对我的图像进行分类 根据this 它只有 2 个测量值 通过这些测量值计算找到最近邻居的距离 但在我的例子中 我有 400 张 25 X 42 的图像 其中 200 个用于训练 200 个用
  • Spring Boot REST · @Constraint 用于删除?

    我正在开发一个使用 Spring Boot REST HATEOAS Hibernate 和 PostgreSQL 的系统后端 为了验证 我开始使用以下类extend org springframework validation Valid
  • LibGDX 移动旋转相机

    我在使用 LibGDX 构建的应用程序中遇到了一种情况 我需要相机能够旋转 并且可以由用户移动 并且能够缩放 我的相机移动和缩放相机的控件工作得很好 但是 当相机旋转时 相机会根据该旋转移动 例如 如果相机向左旋转 45 度 并且用户向右拖
  • 张量流/keras中输入的自相关

    我有一个一维输入信号 我想计算自相关作为神经网络的一部分 以便在网络内部进一步使用 我需要对输入与输入本身进行卷积 在 keras 自定义层 张量流中执行卷积 我们需要以下参数data shape is batch in height in
  • data.frame 中每组的平均值[重复]

    这个问题在这里已经有答案了 我有一个data frame我需要计算每组的平均值 即每Month 以下 Name Month Rate1 Rate2 Aira 1 12 23 Aira 2 18 73 Aira 3 19 45 Ben 1 5
  • 使用 javascript 以管理员身份运行批处理的简单方法

    我想导出一种简单可靠的方法来自动提升正在运行的批处理 而无需使用其他线程中建议的额外 VBS 文件或提升的快捷方式 通过 javascript 从批处理中调用 UAC 对话框可确保代码简短 当在对话框中选择 是 时 下面的脚本会自动将用户正
  • 多维数组中的多个文件上传

    我有一个 php 表单 行数未知 用户可以在其中上传文件 为此 我使用二维数组