本文将介绍PHP实现上传文件的核心机制:
上传文件分为两个部分,HTML显示部分和PHP处理部分,HTML部分主要是让用户来选择所要上传的文件,
然后通过PHP中的$_FILES,我们可以把文件上传到服务器的指定目录。
一下是代码和相关说明:
先来看一下HTML部分:
为了实现文件上传,在form中我们定义了如下属性:
enctype="multipart/form-data",这个属性是必要的。
action定义文件提交路径:上传到当前路径
method定义提交方法:post。
在input中,我们使用type="file"属性,来表示浏览文件。
再来看一个php处理部分:
$_FILES['myfile']['name'] 是指被上传文件的名称
$_FILES['myfile']['type'] 是指被上传文件的类型
$_FILES['myfile']['size'] 是指被上传文件的大小,单位为字节(B)
$_FILES['myfile']['tmp_name'] 是指被上传文件存在服务器中的临时副本文件名称,文件被移动到指定目录后临文件将被自动消毁。
$_FILES['myfile']["error"] 是指由文件上传中有可能出现的错误的状态码,error的错误代码如下:
0; 文件上传成功。
1; 超过了文件大小php.ini中。
2; 超过了文件大小 MAX_FILE_SIZE 选项指定的值。
3; 文件只有部分被上传。
4; 没有文件被上传。
5; 上传文件大小为0。
上传文件的两个核心函数:
bool move_uploaded_file ( string filename, string destination)
函数功能: 将上传的文件移动到新位置。
第一个参数与'tmp_name'对应,第二参数是真正的上传路径,返回bool类型的值。
bool is_uploaded_file ( string filename)
上传文件分为两个部分,HTML显示部分和PHP处理部分,HTML部分主要是让用户来选择所要上传的文件,
然后通过PHP中的$_FILES,我们可以把文件上传到服务器的指定目录。
一下是代码和相关说明:
先来看一下HTML部分:
<form action="upload.php" method="post" enctype="multipart/form-data" action="<?php echo $PATH_INFO?>">
上传:<input type="file" name="myfile" />
<input type="submit" name="submit" value="上传" />
</form>
说明:
为了实现文件上传,在form中我们定义了如下属性:
enctype="multipart/form-data",这个属性是必要的。
action定义文件提交路径:上传到当前路径
method定义提交方法:post。
在input中,我们使用type="file"属性,来表示浏览文件。
再来看一个php处理部分:
<?php
//request the parameter from form
if($_POST["submit"]=="Upload & Send"){ //检测是否提交
$file_name= $_FILES['userfile']['name'] ;
$tmp_name = $_FILES['userfile']['tmp_name'];
//upload file
if(is_uploaded_file($tmp_name)){
$dest_dir='upLoad'; //上传文件的路径
$dest=$dest_dir.'/'.time()."_".$file_name; //为了避免重复提交,将每次上传的文件名前加上时间戳
$r=move_uploaded_file($tmp_name,$dest);
}else {
echo "file upload failed !";
}
?>
对于$_FILES[] ,我们有必要了解以下知识:
$_FILES['myfile']['name'] 是指被上传文件的名称
$_FILES['myfile']['type'] 是指被上传文件的类型
$_FILES['myfile']['size'] 是指被上传文件的大小,单位为字节(B)
$_FILES['myfile']['tmp_name'] 是指被上传文件存在服务器中的临时副本文件名称,文件被移动到指定目录后临文件将被自动消毁。
$_FILES['myfile']["error"] 是指由文件上传中有可能出现的错误的状态码,error的错误代码如下:
0; 文件上传成功。
1; 超过了文件大小php.ini中。
2; 超过了文件大小 MAX_FILE_SIZE 选项指定的值。
3; 文件只有部分被上传。
4; 没有文件被上传。
5; 上传文件大小为0。
上传文件的两个核心函数:
bool move_uploaded_file ( string filename, string destination)
函数功能: 将上传的文件移动到新位置。
第一个参数与'tmp_name'对应,第二参数是真正的上传路径,返回bool类型的值。
bool is_uploaded_file ( string filename)
函数功能:判断文件是否是通过 HTTP POST 上传的。
以上即为上传文件的核心机制,如有讲解有误,还望提出。