PHP实现网页文件上传功能的完整攻略如下:
1. HTML表单
文件上传功能需要通过一个HTML表单向服务器传递数据。
<form enctype="multipart/form-data" action="upload.php" method="POST">
<input type="file" name="file">
<input type="submit" value="上传">
</form>
在上面的表单中,enctype
属性必须设置为 multipart/form-data
表示这是一个包含文件的表单。文件表单需要使用 <input type="file">
标签,通过 name
属性指定后台接收数据时的变量名。
2. PHP处理
PHP 通过 $_FILES
数组来处理上传的文件。在表单中的 name
属性会作为 $_FILES
中的下标。
<?php
if($_FILES['file']['error'] > 0){
echo "上传错误:" . $_FILES['file']['error'];
} else {
echo "上传文件名:" . $_FILES['file']['name'] . "<br>";
echo "文件类型:" . $_FILES['file']['type'] . "<br>";
echo "文件大小:" . ($_FILES['file']['size'] / 1024) . " KB<br>";
echo "文件临时存储位置:" . $_FILES['file']['tmp_name'];
}
?>
上面的示例中,如果 $_FILES['file']['error']
大于 0,说明文件上传出错。可以通过判断 $_FILES['file']['type']
确定文件类型。文件大小可通过 $_FILES['file']['size']
获取,单位是字节。文件会被存储在临时目录中,可以通过 $_FILES['file']['tmp_name']
获得临时文件名。
3. 文件处理
在 PHP 中,可以使用 move_uploaded_file
函数将上传的文件从临时位置移动到指定目录。这步操作要放在所有文件处理之前,确保文件已经上传成功。
<?php
$filename = $_FILES['file']['name'];
$tmpName = $_FILES['file']['tmp_name'];
$folder = "uploads/";
if(move_uploaded_file($tmpName, $folder . $filename)) {
echo "文件已上传!";
} else {
echo "上传失败!";
}
?>
在以上示例中,$filename
存储上传的文件名,$tmpName
含有上传文件的临时文件名,$folder
是上传的文件存放目录,如果成功移动文件,输出“文件已上传”,否则输出“上传失败”。
示例一:
<form enctype="multipart/form-data" action="upload.php" method="POST">
<input type="file" name="file">
<br>
<textarea name="description" rows="10" cols="30"></textarea>
<br>
<input type="submit" value="上传">
</form>
在上面的表单中添加了一个多行文本框,可以让用户输入文件的描述信息。在 PHP 处理中,可以使用 $_POST
数组来获取表单中的文本数据。
<?php
if($_FILES['file']['error'] > 0){
echo "上传错误:" . $_FILES['file']['error'];
} else {
echo "上传文件名:" . $_FILES['file']['name'] . "<br>";
echo "文件类型:" . $_FILES['file']['type'] . "<br>";
echo "文件大小:" . ($_FILES['file']['size'] / 1024) . " KB<br>";
echo "文件临时存储位置:" . $_FILES['file']['tmp_name'] . "<br>";
echo "文件描述:" . $_POST['description'] . "<br>";
$filename = $_FILES['file']['name'];
$tmpName = $_FILES['file']['tmp_name'];
$folder = "uploads/";
if(move_uploaded_file($tmpName, $folder . $filename)) {
echo "文件已上传!";
} else {
echo "上传失败!";
}
}
?>
在上面的 PHP 处理中,使用 $_POST['description']
向客户端输出文件描述信息。如果想将文件描述信息保存到文件中,可以在 move_uploaded_file
函数后添加操作。
示例二:
<form enctype="multipart/form-data" action="upload.php" method="POST">
<input type="file" name="fileMultiple[]" multiple>
<br>
<input type="submit" value="上传">
</form>
在上面的表单中,通过 multiple
属性开启多文件上传功能,name
属性指定后台接收数据时的变量名为 fileMultiple[]
,在 PHP 处理时需要使用循环结构。
<?php
$count = count($_FILES['fileMultiple']['name']);
for($i = 0; $i < $count; $i++){
if($_FILES['fileMultiple']['error'][$i] > 0){
echo "上传错误:" . $_FILES['fileMultiple']['error'][$i];
} else {
echo "上传文件名:" . $_FILES['fileMultiple']['name'][$i] . "<br>";
echo "文件类型:" . $_FILES['fileMultiple']['type'][$i] . "<br>";
echo "文件大小:" . ($_FILES['fileMultiple']['size'][$i] / 1024) . " KB<br>";
echo "文件临时存储位置:" . $_FILES['fileMultiple']['tmp_name'][$i] . "<br>";
$filename = $_FILES['fileMultiple']['name'][$i];
$tmpName = $_FILES['fileMultiple']['tmp_name'][$i];
$folder = "uploads/";
if(move_uploaded_file($tmpName, $folder . $filename)) {
echo "文件已上传!<br><br>";
} else {
echo "上传失败!<br><br>";
}
}
}
?>
在上面的 PHP 处理中,通过 count
函数统计上传文件的数量,使用 for
循环来处理每一个上传的文件。需要注意的是,此时 $_FILES['fileMultiple']
是一个二维数组,需要使用 $_FILES['fileMultiple']['name'][$i]
这种方式来获取上传文件的名称等信息。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:php实现网页常见文件上传功能 - Python技术站