PHP 文件上传
PHP脚本可以与HTML表单一起使用,允许用户将文件上传到服务器。最初,文件被上传到临时目录,然后由PHP脚本重定位到目标位置。
在 phpinfo.php 页面中提供了临时目录的信息,用于文件上传的临时目录的名称为 upload_tmp_dir ,允许上传的最大文件大小为 upload_max_filesize 。这些参数存储在PHP配置文件 php.ini 中。
上传文件的过程如下:
- 用户打开包含HTML表单的页面,其中包含文本字段、浏览按钮和提交按钮。
-
用户点击浏览按钮,从本地计算机选择要上传的文件。
-
所选文件的完整路径显示在文本字段中,然后用户点击提交按钮。
-
所选文件被发送到服务器上的临时目录。
-
在表单的action属性中指定的PHP脚本作为表单处理程序,检查文件是否已到达,然后将文件复制到目标目录。
-
PHP脚本向用户确认操作成功。
通常在编写文件时,临时目录和最终位置都需要设置写入文件的权限。如果其中一个设置为只读,操作将失败。
上传的文件可以是文本文件、图像文件或任何文档。
创建上传表单
下面的HTML代码创建了一个上传表单。这个表单的方法属性设置为 post ,enctype属性设置为 multipart/form-data 。
<?php
if(isset(_FILES['image'])){errors= array();
file_name =_FILES['image']['name'];
file_size =_FILES['image']['size'];
file_tmp =_FILES['image']['tmp_name'];
file_type=_FILES['image']['type'];
file_ext=strtolower(end(explode('.',_FILES['image']['name'])));
extensions= array("jpeg","jpg","png");
if(in_array(file_ext,extensions)=== false){errors[]="extension not allowed, please choose a JPEG or PNG file.";
}
if(file_size>2097152){errors[]='File size must be excately 2 MB';
}
if(empty(errors)==true){
move_uploaded_file(file_tmp,"images/".file_name);
echo "Success";
}else{
print_r(errors);
}
}
?>
<html>
<body>
<form action="" method="POST" enctype="multipart/form-data">
<input type="file" name="image" />
<input type="submit"/>
</form>
</body>
</html>
它将产生以下结果−
创建一个上传脚本
有一个全局的PHP变量叫做 $_FILES 。这个变量是一个关联双维数组,保存了所有与上传文件相关的信息。所以,如果上传表单中的input元素的name属性的值为 file ,那么PHP会创建以下五个变量:
$_FILES['file']['tmp_name']
- 在Web服务器上的临时目录中的上传文件。-
$_FILES['file']['name']
- 上传文件的实际名称。 -
$_FILES['file']['size']
- 上传文件的字节大小。 -
$_FILES['file']['type']
- 上传文件的MIME类型。 -
$_FILES['file']['error']
- 与该文件上传相关的错误代码。
示例
下面的示例应该允许上传图片,并返回上传文件的相关信息。
<?php
if(isset(_FILES['image'])){errors= array();
file_name =_FILES['image']['name'];
file_size =_FILES['image']['size'];
file_tmp =_FILES['image']['tmp_name'];
file_type =_FILES['image']['type'];
file_ext=strtolower(end(explode('.',_FILES['image']['name'])));
extensions= array("jpeg","jpg","png");
if(in_array(file_ext,extensions)=== false){errors[]="extension not allowed, please choose a JPEG or PNG file.";
}
if(file_size>2097152) {errors[]='File size must be excately 2 MB';
}
if(empty(errors)==true) {
move_uploaded_file(file_tmp,"images/".file_name);
echo "Success";
}else{
print_r(errors);
}
}
?>
<html>
<body>
<form action = "" method = "POST" enctype = "multipart/form-data">
<input type = "file" name = "image" />
<input type = "submit"/>
<ul>
<li>Sent file: <?php echo _FILES['image']['name']; ?>
<li>File size: <?php echo_FILES['image']['size']; ?>
<li>File type: <?php echo $_FILES['image']['type'] ?>
</ul>
</form>
</body>
</html>
它将产生以下结果 −