參考: http://www.phpchina.com/html/97/14397-4443.html
利用html提供的文件上傳功能,php其實僅僅是把它保存在本地指定目錄。
1、首先dump php 內置變量:
#var_dump($_FILES);
array(1) {
["file"]=>
array(5) {
["name"]=>
string(8) "test.txt"
["type"]=>
string(10) "text/plain"
["tmp_name"]=>
string(18) "/var/tmp/phpUCf72l"
["error"]=>
int(0)
["size"]=>
int(589)
}
}
可以看到文件其實已經被臨時存放在服務器了。
2、這時需要做的,就是把它用合適的名稱保存到指定目錄。
獲取文件後綴,進行一些必要的檢查。
生成一個唯一的文件名。
---------------------------------------------
# index.html
<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>
# upload.php
<?php
//var_dump($_FILES);
$uploaddir = "./files/";//設置文件保存目錄 注意包含/
$allow_types = array("txt");//設置允許上傳文件的類型
// 返回函數
+ +-- 4 lines: function _return($ret_code, $ret_msg){------------------------------------------------------------------------------
+ +-- 3 lines: function _return_ok($ret_msg){--------------------------------------------------------------------------------------
+ +-- 3 lines: function _return_error($ret_msg){-----------------------------------------------------------------------------------
// 原始文件信息
$raw_file_name = trim($_FILES['file']['name']);
$raw_file_type = trim($_FILES['file']['type']);
$raw_file_tail = strtolower(substr(strrchr($raw_file_name, '.'), 1));
//判斷文件類型
if(!in_array($raw_file_tail, $allow_types)){
$text = implode(",",$allow_types);
_return_error("allow type: $text");
}
if ('text/plain' != $raw_file_type){
_return_error("allow type: text/plain");
}
//生成目標文件的文件名
$upload_file_name = tempnam($uploaddir, $raw_file_name.".");
// 保存文件
if (move_uploaded_file($_FILES['file']['tmp_name'],$upload_file_name)){
_return_ok("ok");
} else {
_return_error("fail");
}
exit;
?>