PHP单文件上传和多文件上传(附带实例)
使用表单可以进行文件上传,需要给 <form> 标签设置 enctype 属性。
enctype 属性用于指定表单数据的编码方式,默认值为 application/x-www-form-urlencoded,如果要实现文件上传,需要将其设置为 multipart/form-data。示例代码如下:
文件上传后,就会被服务器自动保存在临时目录中,文件的保存期限为 PHP 脚本的执行周期,当 PHP 脚本执行结束后,文件就会被释放。如果想将文件永久保存下来,需要使用 PHP 提供的 move_uploaded_file() 函数将文件保存到指定的目录中。
将文件从临时目录保存到指定目录的示例代码如下:
用 PHP 处理多文件上传时,使用 $_FILES 接收上传的文件的信息,利用循环处理文件信息,示例代码如下:
enctype 属性用于指定表单数据的编码方式,默认值为 application/x-www-form-urlencoded,如果要实现文件上传,需要将其设置为 multipart/form-data。示例代码如下:
<form action="表单提交地址" method="POST" enctype="multipart/form-data"> <input type="file" name="file"> <input type="submit" value="上传"> </form>使用 $_POST 接收上传的文件,信息仅包含文件的名称,如果想要获取文件的详细信息,需要使用 $_FILES 超全局变量来获取。$_FILES 数组中保存了文件的 6 个信息,具体如下:
- name:通过浏览器上传的文件的原名称;
- type:文件的 MIME 类型,如 image/gif;
- size:上传文件的大小,单位为字节;
- tmp_name:文件被上传后存储在服务器端的临时文件名,一般为系统默认名,可以在 php.ini 的 upload_tmp_dir 中指定;
- full_path:浏览器提交的完整路径。该值并不总是包含真实的目录结构,因此不能被信任;
- error:文件上传相关的错误代码,具体含义如下表所示。
| 代码 | 常量 | 说明 |
|---|---|---|
| 0 | UPLOAD_ERR_OK | 没有错误发生,文件上传成功 |
| 1 | UPLOAD_ERR_INI_SIZE | 上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值 |
| 2 | UPLOAD_ERR_FORM_SIZE | 上传的文件大小超过了表单中 MAX_FILE_SIZE 选项指定的值 |
| 3 | UPLOAD_ERR_PARTIAL | 只有部分文件被上传 |
| 4 | UPLOAD_ERR_NO_FILE | 没有文件被上传 |
| 6 | UPLOAD_ERR_NO_TMP_DIR | 找不到临时目录 |
| 7 | UPLOAD_ERR_CANT_WRITE | 文件写入失败 |
文件上传后,就会被服务器自动保存在临时目录中,文件的保存期限为 PHP 脚本的执行周期,当 PHP 脚本执行结束后,文件就会被释放。如果想将文件永久保存下来,需要使用 PHP 提供的 move_uploaded_file() 函数将文件保存到指定的目录中。
将文件从临时目录保存到指定目录的示例代码如下:
if (isset($_FILES['upload'])) {
if ($_FILES['upload']['error'] !== UPLOAD_ERR_OK) {
exit('上传失败!');
}
$save = './uploads/' . time() . '.dat';
if (!move_uploaded_file($_FILES['upload']['tmp_name'], $save)) {
exit('上传失败,无法将文件保存到指定位置!');
}
echo '上传成功!';
}
在上述示例代码中,第 5 行代码利用时间戳自动生成文件名,而不是直接保存原文件名。这种方式可以防止浏览器提交非法的文件名造成程序出错,也能防止浏览器提交“.php”扩展名的文件造成恶意脚本执行。第 6 行代码使用 move_uploaded_file() 函数将临时文件保存到指定的目录中。PHP多文件上传
多文件上传是指一次性上传多个文件,上传的文件属于同一类文件,示例代码如下:<form action="表单提交地址" method="post" enctype="multipart/form-data"> 个人相册: <input type="file" name="photo[]"> <input type="file" name="photo[]"> <input type="file" name="photo[]"> <input type="submit" value="上传"> </form>在上述示例代码中,文件上传按钮的 name 属性采用数组的命名方式,表示上传多个文件。
用 PHP 处理多文件上传时,使用 $_FILES 接收上传的文件的信息,利用循环处理文件信息,示例代码如下:
$len = count($_FILES['photo']['name']);
for ($i = 0; $i < $len; $i++) {
$file = [
'name' => $_FILES['photo']['name'][$i],
'type' => $_FILES['photo']['type'][$i],
'tmp_name' => $_FILES['photo']['tmp_name'][$i],
'error' => $_FILES['photo']['error'][$i],
'size' => $_FILES['photo']['size'][$i]
];
}
在上述示例代码中,通过 for 语句获取上传的文件信息,并将其保存到指定目录中。
ICP备案:
公安联网备案: