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];
}
生成隨機文件名
方法1:預置一個的字符串$chars ,包括 a–z,A–Z,0–9,以及一些特殊字符,生成固定長度的隨機字符串。
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;
}
方法2:使用時間戳作為文件名
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();