可以对 input 域使用不同的 name 来上传多个文件。
PHP 支持同时上传多个文件并将它们的信息自动以数组的形式组织。要完成这项功能,需要在 HTML 表单中对文件上传域使用和多选框与复选框相同的数组式提交语法。
示例 #1 上传多个文件
<form action="file-upload.php" method="post" enctype="multipart/form-data"> Send these files:<br /> <input name="userfile[]" type="file" /><br /> <input name="userfile[]" type="file" /><br /> <input type="submit" value="Send files" /> </form>
当以上表单被提交后,数组 $_FILES['userfile'],$_FILES['userfile']['name'] 和 $_FILES['userfile']['size'] 将被初始化。
例如,假设名为 /home/test/review.html 和 /home/test/xwp.out 的文件被提交,则 $_FILES['userfile']['name'][0] 的值将是 review.html,而 $_FILES['userfile']['name'][1] 的值将是 xwp.out。类似的,$_FILES['userfile']['size'][0] 将包含文件 review.html 的大小,依此类推。
此外也同时设置了 $_FILES['userfile']['name'][0], $_FILES['userfile']['tmp_name'][0], $_FILES['userfile']['size'][0] 以及 $_FILES['userfile']['type'][0]。
max_file_uploads 配置选项对单次请求中可上传的文件数量进行了限制。需要确保表单在单次请求中上传的文件数量不超过此限制。
示例 #2 上传整个目录
在 HTML 文件上传字段中,可以使用 webkitdirectory
属性上传整个目录。大多数现代浏览器都支持此功能。
利用 full_path 信息,可以存储相对路径,或者在服务器上重建相同的目录结构。
<form action="file-upload.php" method="post" enctype="multipart/form-data"> Send this directory:<br /> <input name="userfile[]" type="file" webkitdirectory multiple /> <input type="submit" value="Send files" /> </form>
webkitdirectory
属性是非标准的,也不在标准化进程中。不要在面向公众的生产环境中使用它:它不会对所有用户都有效。各实现之间可能存在很大的不兼容性,将来行为可能会发生变化。
PHP 仅解析浏览器/用户代理提交的相对路径信息,并将该信息传递到 $_FILES
数组中。不能保证 full_path 数组中的值包含真实的目录结构,PHP
应用程序不得信任此信息。