PHP单文件上传原理及上传函数的封装操作示例
什么是文件上传?
文件上传指将本地文件通过互联网传输到服务器上的指定目录中。
文件上传的原理
在服务器端,所有的文件都以二进制的形式存储。当客户端上传文件时,服务器会在内存中开辟一块空间,将上传的文件保存在该空间中,然后将这个文件从内存中保存到服务器的硬盘上。
文件上传的过程中,主要的参数如下:
- 文件名
- 文件类型
- 文件大小
这些参数可以通过 PHP 程序进行获取。
实现文件上传的步骤
-
前端编写上传表单;
-
从表单中取得上传文件的相关信息,包括文件名、类型、大小等,将其存储在 PHP 变量中;
-
把文件从客户端的临时文件夹移动到服务器指定的目录中。
PHP单文件上传函数的封装及操作示例
为了方便地实现文件上传,我们可以封装一个上传函数。下面是一个基本的PHP单文件上传函数:
function uploadFile($file_input_name, $directory_path){
$file_name = $_FILES[$file_input_name]['name'];
$file_size = $_FILES[$file_input_name]['size'];
$file_tmp = $_FILES[$file_input_name]['tmp_name'];
$file_type = $_FILES[$file_input_name]['type'];
$extensions = array("jpeg","jpg","png");
if(in_array($file_extension,$extensions)=== false){
return false;
}
if($file_size > 2097152){
return false;
}
$fileDestination = $directory_path.'/'.$file_name;
move_uploaded_file($file_tmp, $fileDestination);
return true;
}
上述代码中,$file_input_name 为上传表单中文件的 input name,$directory_path 为指定的目录。
我们可以通过调用 uploadFile 函数,实现文件上传。比如:
if (!isset($_POST['submit'])) {
echo "没有上传文件";
exit;
} else {
$file_input_name = "uploadfile";
$directory_path = "uploads";
$result = uploadFile($file_input_name, $directory_path);
if ($result) {
echo "文件上传成功";
} else {
echo "文件上传失败";
}
}
上述示例代码中,在 "uploads" 目录下上传了名为 "uploadfile" 的文件。如果上传成功,返回 "文件上传成功";反之,返回 "文件上传失败"。
示例说明
示例一
一个产品发布网站具有上传图片的功能,用户通过表单上传一个图片文件,并支持传输的类型为 "jpg","jpeg"和 "png"。开发人员为该产品发布网站增加文件上传功能,如何实现?
代码示例:
// 文件上传函数
function uploadFile($file_input_name, $directory_path) {
$file_name = $_FILES[$file_input_name]['name'];
$file_size = $_FILES[$file_input_name]['size'];
$file_tmp = $_FILES[$file_input_name]['tmp_name'];
$file_type = $_FILES[$file_input_name]['type'];
$extensions = array("jpeg","jpg","png");
$file_extension = pathinfo($file_name, PATHINFO_EXTENSION);
if(!in_array($file_extension,$extensions)) {
// 上传的文件类型不在规定范围内
return false;
}
if($file_size > 2097152) {
// 上传的文件过大
return false;
}
$fileDestination = $directory_path.'/'.$file_name;
// 保存上传的文件
move_uploaded_file($file_tmp, $fileDestination);
return true;
}
// 实例化文件上传函数
if(isset($_POST['submit'])) {
$file_input_name = "file_input_name_jpg";
$directory_path = "uploads";
$result = uploadFile($file_input_name, $directory_path);
if ($result) {
echo "文件上传成功";
} else {
echo "文件上传失败";
}
}
示例二
一个视频分享网站需要开发人员增加视频文件的上传功能。该视频分享网站的服务器允许上传文件大小不超过 10MB,只支持 ".mp4" 格式。
代码示例:
// 文件上传函数
function uploadFile($file_input_name, $directory_path) {
$file_name = $_FILES[$file_input_name]['name'];
$file_size = $_FILES[$file_input_name]['size'];
$file_tmp = $_FILES[$file_input_name]['tmp_name'];
$file_type = $_FILES[$file_input_name]['type'];
$extensions = array("mp4");
$file_extension = pathinfo($file_name, PATHINFO_EXTENSION);
if(!in_array($file_extension,$extensions)) {
// 上传的文件类型不在规定范围内
return false;
}
if($file_size > 10485760) {
// 上传的文件过大
return false;
}
$fileDestination = $directory_path.'/'.$file_name;
// 保存上传的文件
move_uploaded_file($file_tmp, $fileDestination);
return true;
}
// 实例化文件上传函数
if(isset($_POST['submit'])) {
$file_input_name = "file_input_name_mp4";
$directory_path = "video_upload";
$result = uploadFile($file_input_name, $directory_path);
if ($result) {
echo "文件上传成功";
} else {
echo "文件上传失败";
}
}
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:PHP单文件上传原理及上传函数的封装操作示例 - Python技术站