文件上传是 Web 开发所必须掌握的一个技能,而 PHP 提供了一些函数以便于处理文件上传的任务。
首先,要在 HTML 表单中创建文件上传的输入框,代码如下:
```
```
核心部分是 `enctype="multipart/form-data"`,它告诉服务器该表单需要以多段数据方式进行提交,以便上传文件。
一旦提交表单,我们需要在 PHP 文件中处理上传的文件。首先,我们需要获取上传文件的信息,可以用 `$_FILES` 超全局变量来获取,例如:
```
$target_dir = "uploads/"; // 上传文件的存储目录
$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]); // 上传文件的完整路径
$uploadOk = 1;
$imageFileType = strtolower(pathinfo($target_file,PATHINFO_EXTENSION));
// 检查上传文件是否为真实的图像
if(isset($_POST["submit"])) {
$check = getimagesize($_FILES["fileToUpload"]["tmp_name"]);
if($check !== false) {
echo "File is an image - " . $check["mime"] . ".";
$uploadOk = 1;
} else {
echo "File is not an image.";
$uploadOk = 0;
}
}
```
其中,`basename($_FILES["fileToUpload"]["name"])` 表示上传文件的原始名称,`strtolower(pathinfo($target_file,PATHINFO_EXTENSION))` 可以获取文件的扩展名,方便后面做一些判断。
接着,我们需要检查上传文件的合法性。最基本的检查如下:
```
// 检查文件大小
if ($_FILES["fileToUpload"]["size"] > 500000) {
echo "Sorry, your file is too large.";
$uploadOk = 0;
}
// 允许的文件格式
if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg"
&& $imageFileType != "gif" ) {
echo "Sorry, only JPG, JPEG, PNG & GIF files are allowed.";
$uploadOk = 0;
}
// 检查文件是否已存在
if (file_exists($target_file)) {
echo "Sorry, file already exists.";
$uploadOk = 0;
}
```
以上判断主要是根据开发需求来决定,如需求只需要上传图片,则可以限制文件格式为 jpg、png、jpeg 和 gif,超出限定的格式则不予上传。
最后,我们需要将上传的文件移动到指定的存储目录,代码如下:
```
if ($uploadOk == 0) {
echo "Sorry, your file was not uploaded.";
} else {
if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) {
echo "The file ". htmlspecialchars( basename( $_FILES["fileToUpload"]["name"])). " has been uploaded.";
} else {
echo "Sorry, there was an error uploading your file.";
}
}
```
函数 `move_uploaded_file()` 将上传的文件从临时目录移动到另一个目录。请注意保证目标目录具有写权限。
关于文件上传,还需要注意以下几点:
1. 在 `php.ini` 文件中,需要将 `upload_max_filesize` 和 `post_max_size` 的值设置为足够大的数值,以便上传较大的文件。
2. 上传的文件在服务器的临时目录中,所以需要将上传的文件移动到指定目录后及时删除临时文件。
3. 上传文件时,一定要针对不同的扩展名做不同的安全措施,例如对于图片类型的文件,可以通过 `getimagesize()` 函数来判断文件是否为真实的图像文件,对于其它的文件类型,可以考虑使用第三方库对文件进行过滤检查。
总之,文件上传虽然是一个常见而简单的任务,但如果不注意安全性,可能会给系统带来安全隐患。针对不同的需求,可以使用各种不同的检查手段来确保文件上传的安全性。
壹涵网络我们是一家专注于网站建设、企业营销、网站关键词排名、AI内容生成、新媒体营销和短视频营销等业务的公司。我们拥有一支优秀的团队,专门致力于为客户提供优质的服务。
我们致力于为客户提供一站式的互联网营销服务,帮助客户在激烈的市场竞争中获得更大的优势和发展机会!
发表评论 取消回复