PHP中应用move_uploaded_file()函数实现文件上传。但是,在执行文件上传之前,为了防止潜在的攻击对原本不能通过脚本交互的文件进行非法管理,可以先应用is_uploaded_file()函数判断指定的文件是否是通过HTTP POST 上传的,如果是则返回TRUE,则可以继续执行文件的上传操作,否则将不能够继续执行。
is_uploaded_file()函数
is_uploaded_file()函数判断指定的文件是否通过HTTP POST 上传的。其语法如下:
bool is_uploaded_file(string filename)
其中,参数filename必须指定类似于$_FILES['filename']['tmp_name']的变量,不可以使用从客户端上传的文件名$_FILES['filename']['name']。
通过is_uploaded_file()函数对上传文件进行判断,可以确保恶意的用户无法欺骗脚本去访问本不能访问的文件,如/etc/passwd。
move_uploaded_file()函数
move_uploaded_file()函数将文件上传到服务器中指定的位置。如果成功返回TRUE,否则返回FALSE。其语法如下:
bool move_uploaded_file ( string filename, string destination )
其中,参数filename指定上传文件的临时文件名,即$_FILES[tmp_name]:参数destination指文件上传后保存的新路径和名称。
说明:如果参数filename 不是合法的上传文件,不会执行任何操作,move_uploaded_file()将返回FALSE。如果参数filename是合法的上传文件,但出于某些原因无法移动,同样也不会执行任何操作,move_uploaded_file()将返回FALSE。此外还会发出一条警告。
下面编写一个实例,应用move_upload_file()函数实现文件的上传。
在本实例中,通过is_uploaded_file()函数判断指定的文件是否通过HTTP POST 上传,并运行move_upload_file()函数将上传文件移动到指定的文件夹中。具体步骤如下:
首先,创建表单,设置enctype的属性值为multipart/form-data,设置隐藏域、文件域和提交按钮,使用POST方法将数据提交到当前页面。然后,通过$_FILES获取上传文件的相关信息,并根据上传信息将文件保存在服务器的临时文件夹中。最后,通过move_upload_file()函数将上传的文件移动到指定位置。代码如下:
if(isset($_POST[sub])){//当页面中存在变量sub时
if(!is_dir("images")){//如果不存在images文件夹
mkdir("images")){//创建此文件夹
}
$file=$_FILES['text'];//将图片的相关信息保存在数组中
if(is_uploaded_file($file['tmp_name'])){//判断文件是否是一个上传文件
$rand=rand(1,1000);//随机取1~1000的随机数一个
$floatTime=microtime();//获取此时刻的微秒数
$str=substr($file['name'],-4,4);//截取上传文件名称后4位
$path='images/".($and+$floatTime).$str;//拼接图片路径
if(move_uploaded_file($file['tmp_name'],$path)){//将文件移动到指定文件夹并输出信息
echo "上传成功,文件名称为:".($and+$floatTime).$str;
}
}
}
?>
#one{
margin:100px 400px;
width:350px;
height:150px;
-moz-border-radius: 10px;
-webkit-border-radius: 10px;
border-radius:10px;
behavior: url(ie-css3.htc);
background-color:white;
border:1px solid #96D5EB;
}
.three{
font-size: 30px;
font-family: "方正黄草简体";
padding:15px 15px;
}
.one{
border:1px solid red;
margin-left:40px;
}
.two{
border:1px solid red;
height:20px;
background-color:white;
}
.four{
font-size: 15px;
color:red;
padding-left:20px;
}
文件上传
if(isset($_POST[sub])){
$_SESSION[sub]=$_POST[sub];
if(!is_dir("images")){
mkdir("images");
}
$file=$_FILES['text'];
if(is_uploaded_file($file['tmp_name'])){
$rand=rand(1,1000);
$floatTime=microtime();
$str=substr($file['name'],-4,4);
$path="images/".($and+$floatTime).$str;
if(move_uploaded_file($file['tmp_name'],$path)){
echo "上传成功,文件名称为:".($and+$floatTime).$str;
}
}
}
?>