以下是详细讲解“上传多个文件的PHP脚本”的完整攻略。
1. HTML 表单
首先,在上传多个文件之前,我们需要一个 HTML 表单页面来让用户选择要上传的文件。这个表单需要指定以下三个属性:
enctype="multipart/form-data"
:设置表单数据编码格式为二进制流,用于支持上传文件数据;method="POST"
:设置表单数据提交方式;multiple
:设置是否允许选择多个文件。
这个表单页面的 HTML 代码可以写成如下形式:
<form action="upload.php" method="POST" enctype="multipart/form-data">
<input type="file" name="file[]" multiple>
<input type="submit" value="上传文件">
</form>
在这个表单中,选择文件的输入框设置了 name="file[]"
,并加上了 multiple
属性,表示可以选择多个文件。
2. PHP 上传脚本
在 HTML 表单页面中提交后,服务器端需要一个 PHP 脚本来接收上传的文件并进行处理。下面是一个通用的上传多个文件的 PHP 脚本:
<?php
// 上传目录
$upload_dir = '/path/to/upload/';
// 遍历所有文件域,逐个保存上传的文件
foreach ($_FILES['file']['name'] as $i => $name) {
// 如果上传有错误,则直接返回
if ($_FILES['file']['error'][$i] !== UPLOAD_ERR_OK) {
echo '上传文件出错';
exit;
}
// 生成保存新文件的文件名
$new_filename = uniqid() . '_' . $_FILES['file']['name'][$i];
// 拼接出完整的保存路径
$save_path = $upload_dir . $new_filename;
// 将文件从上传临时目录移动到保存目录中
if (move_uploaded_file($_FILES['file']['tmp_name'][$i], $save_path)) {
echo '文件上传成功:' . $name;
} else {
echo '文件上传失败:' . $name;
}
}
?>
这个 PHP 脚本的基本思路是,遍历上传的所有文件,逐个保存到指定的上传目录中。如果上传过程中出现错误,则直接返回错误信息。
3. 示例说明
下面,我们使用两个例子来演示如何使用这个上传多个文件的 PHP 脚本。
示例一:上传文件到本地
我们现在有一个本地的 Web 服务器,并且希望将用户上传的多个文件保存到服务器的某个特定目录中。
- 创建一个文件夹
upload
在服务器根目录下,用于存储上传的文件。 - 在
index.html
中嵌入上面的 HTML 表单代码。 - 在
upload.php
中复制上面的 PHP 代码,并将$upload_dir
变量设置为服务器中要存储上传文件的目录路径。 - 打开浏览器,访问
index.html
,选择多个文件上传即可。上传成功后,文件会保存到指定的目录中。
示例二:上传文件到阿里云 OSS
我们现在有一个使用阿里云 OSS 存储的 Web 应用,并且希望将用户上传的多个文件保存到 OSS 中。
- 在阿里云控制台中创建一个 OSS Bucket。
- 在本地开发环境中安装 aliyun-oss PHP SDK。可以通过 composer 安装,也可以手动下载。安装方法可以参考阿里云文档。
- 在
index.html
中嵌入上面的 HTML 表单代码。和示例一相同。 -
在
upload.php
中,先按照 官方文档 提供的方式引入 aliyun-oss PHP SDK。然后,需要配置以下四个参数: -
$accessKeyId
:阿里云 Access Key ID。 $accessKeySecret
:阿里云 Access Key Secret。$endpoint
:OSS 的外网 Endpoint。$bucket
:OSS Bucket 名称。
配置好这四个参数后,可以将上面的 PHP 代码进行修改。将文件保存到阿里云 OSS 中的代码如下:
```php
';
// 阿里云 Access Key Secret
$accessKeySecret = '
// OSS 外网 Endpoint
$endpoint = 'http://oss-cn-hangzhou.aliyuncs.com';
// OSS Bucket 名称
$bucket = '
// 创建 OSS 客户端实例
$ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint);
// 遍历所有文件域,逐个保存上传的文件
foreach ($_FILES['file']['name'] as $i => $name) {
// 如果上传有错误,则直接返回
if ($_FILES['file']['error'][$i] !== UPLOAD_ERR_OK) {
echo '上传文件出错';
exit;
}
// 生成保存新文件的文件名
$new_filename = uniqid() . '_' . $_FILES['file']['name'][$i];
//获取文件类型
$ext = strtolower(pathinfo($_FILES['file']['name'][$i], PATHINFO_EXTENSION));
// 初始化一个流式实例
$stream = fopen($_FILES['file']['tmp_name'][$i], 'r');
// 将文件上传到 OSS 中
try {
$ossClient->putObject($bucket, 'upload/' . $new_filename, $stream);
echo '文件上传成功:' . $name;
} catch (OssException $e) {
echo '文件上传失败:' . $e->getMessage();
exit;
}
}
?>
```
上面的代码中,我们使用 aliyun-oss PHP SDK 的 OssClient
类创建了一个 OSS 客户端实例,然后通过 putObject
方法将文件上传到 OSS 中。$stream
参数传入以二进制读模式打开的文件流,第二个参数为存储的文件路径,upload
文件夹和new_filename
文件名的组合,设置了一个上传文件夹upload
。
- 打开浏览器,访问
index.html
,选择多个文件上传即可。上传成功后,文件会保存到阿里云 OSS 中。
以上就是使用 PHP 上传多个文件的完整攻略,希望对您有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:上传多个文件的PHP脚本 - Python技术站