标签:
$_FILES包含有所有上传的文件信息。假设文件上传字段的名称为 img。则
$_FILES[‘img‘][‘error‘]有以下几种类型:
UPLOAD_ERR_OK
其值为 0,没有错误发生,文件上传成功。
UPLOAD_ERR_INI_SIZE
其值为 1,上传的文件超过了 php.ini 中 upload_max_filesize选项限制的值。
UPLOAD_ERR_FORM_SIZE
其值为 2,上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值。
UPLOAD_ERR_PARTIAL
其值为 3,文件只有部分被上传。
UPLOAD_ERR_NO_FILE
其值为 4,没有文件被上传。
UPLOAD_ERR_NO_TMP_DIR
其值为 6,找不到临时文件夹。PHP 4.3.10 和 PHP 5.0.3 引进。
UPLOAD_ERR_CANT_WRITE
其值为 7,文件写入失败。PHP 5.1.0 引进。
move_uploaded_file
文件被上传后,默认地会被储存到服务端的默认临时目录中(除非 php.ini 中的 upload_tmp_dir设置为其它的路径),文件名是随机的。如果该文件没有被移动到其它地方也没有被改名,则该文件将在表单请求结束时被删除。因此需要通过move_uploaded_file移动临时文件。
语法:move_uploaded_file ($filename,$destination )
上传文件功能由两个部分组成,HTML页面和PHP处理部分。HTML页面主要是让用户选择所要上传的文件,PHP部分让我们可以把文件存储到服务器的指定目录。
html部分:uploadFile.html
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html"; charset="utf-8" />
<title>PHP上传文件</title>
</head>
<body>
<form method="post" action="upload.php" enctype="multipart/form-data">
<table border=0 cellspacing=0 cellpadding=0 align=center width="100%">
<tr>
<td width=55 height=20 align="center">
<input type="hidden" name="MAX_FILE_SIZE" value="2000000">文件:
</td>
<td height="16">
<input name="file" type="file" value="浏览" >
<input type="submit" value="上传" name="B1">
</td>
</tr>
</table>
</form>
</body>
</html>
效果图:
说明:
<form method="post" action="upload.php" enctype="multipart/form-data">
表单中必须设置enctype="multipart/form-data,这样,服务器就知道上传文件带有常规表单信息。
<input type="hidden" name="MAX_FILE_SIZE" value="2000000">
用一个隐藏域来限制上传文件的最大长度,这里name必须设置成MAX_FILE_SIZE,其值就是上传文件的最大长度,单位是B,这里限制为文件最大2M。此外php.ini中设置的上传文件最大长度可能会影响到你的实际上传,需要根据实际情况修改。
<input name="file" type="file" value="浏览" >
type="file"说明了文件类型,这样一个基本的上传文件接口就完成了,接下来讲讲如何用PHP来处理上传的文件,此外PHP文件上传功能配置主要涉及php.ini配置文件中的upload_tmp_dir、upload_max_filesize、post_max_size等选项,请根据实际情况修改。
php部分:upload.php
// 允许上传的图片类型
$allowedExts = array("gif", "jpeg", "jpg", "png");
// 获取文件后缀名
$temp = explode(".", $_FILES["file"]["name"]); //输出:Array ( [0] => deer [1] => jpg )
$extension = end($temp);
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/jpg")
|| ($_FILES["file"]["type"] == "image/pjpeg")
|| ($_FILES["file"]["type"] == "image/x-png")
|| ($_FILES["file"]["type"] == "image/png"))
&& ($_FILES["file"]["size"] < 204800) // 小于 200 kb
&& in_array($extension, $allowedExts)) {
if ($_FILES["file"]["error"] > 0) {
echo "错误:: " . $_FILES["file"]["error"] . "<br>";
} else {
echo "上传文件名: " . $_FILES["file"]["name"] . "<br>";
echo "文件类型: " . $_FILES["file"]["type"] . "<br>";
echo "文件大小: " . ($_FILES["file"]["size"] / 1024) . " kB<br>";
echo "文件临时存储的位置: " . $_FILES["file"]["tmp_name"] . "<br>";
// 判断当前目录下是否存在该文件
if (file_exists("./" . $_FILES["file"]["name"])) {
echo $_FILES["file"]["name"] . " 文件已经存在。 ";
} else {// 如果没有该目录,创建目录
move_uploaded_file($_FILES["file"]["tmp_name"], "./" . $_FILES["file"]["name"]);
echo "文件存储在: " . "./" . $_FILES["file"]["name"];
}
}
} else {
echo "非法的文件格式";
}
效果图:
获取文件后缀名
上例中使用的是end()函数。end() 函数将数组内部指针指向最后一个元素,如果成功则返回该元素的值;如果数组为空则返回FALSE。
语法:end(array)。
除了使用end()函数获取文件后缀名外,还可以使用substr()函数、explode()函数获取文件后缀名,如下:
function getFileExt($filename) {
return substr(strrchr($filename, ‘.‘), 1);
}
function getFileExt($filename){
$temp = explode(".", $filename);
return $temp[count($temp)-1];
}
生成随机文件名
function random($length) {
$file_name = ‘CR-‘;
$chars = ‘ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz‘;
$max = strlen($chars) - 1;
mt_srand((double)microtime() * 1000000);
for($i = 0; $i < $length; $i++) {
//取字符数组 $chars 的任意元素
$file_name .= $chars[mt_rand(0, $max)];
//使用 substr 截取$chars中的任意一位字符
//$file_name .= substr($chars, mt_rand(0, strlen($chars) – 1), 1);
}
return $file_name;
}
1、time():返回的结果即当前的时间戳(10位);
2、strtotime(date(‘Y-d-m H:i:s‘)):时间日期转换为时间戳(10位);
3、获取毫秒级时间戳(13位)
php本身没有提供返回毫秒数的函数,但提供了microtime()方法,它会返回一个数组,包含两个元素:一个是秒数、一个是小数表示的毫秒数,我们可以通过如下方法获取返回的毫秒数:
<?php
function getMillisecond() {
list($t1, $t2) = explode(‘ ‘, microtime());
return (float)sprintf(‘%.0f‘, (floatval($t1) + floatval($t2)) * 1000);
}
echo getMillisecond();
标签:
原文地址:http://www.cnblogs.com/sunshineliulu/p/5580031.html