|
bool move_uploaded_file ( string filename, string destination )本函數(shù)檢查并確保由 filename 指定的文件是合法的上傳文件(即通過(guò) php 的 HTTP POST 上傳機(jī)制所上傳的)。如果文件合法,則將其移動(dòng)為由 destination 指定的文件。
如果 filename 不是合法的上傳文件,不會(huì)出現(xiàn)任何操作,move_uploaded_file() 將返回 FALSE。
如果 filename 是合法的上傳文件,但出于某些原因無(wú)法移動(dòng),不會(huì)出現(xiàn)任何操作,move_uploaded_file() 將返回 FALSE。此外還會(huì)發(fā)出一條警告。
下面我們通過(guò)一個(gè)實(shí)例來(lái)說(shuō)明php是如何實(shí)現(xiàn)文件上傳的。
test.php 的原文件
復(fù)制代碼 代碼如下:<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>網(wǎng)站文件上傳實(shí)例</title>
<!--
-->
</head>
<body>
<form enctype="multipart/form-data" action=action.php method=post>
<input type="hidden" name="MAX_FILE_SIZE" value="2000000">
<input type=file name=upfile size=20>
<input type=submit value='上傳文件'>
</form>
</body>
</html>
MAX_FILE_SIZE 隱藏字段(單位為字節(jié))必須放在文件輸入字段之前,其值為接收文件的最大尺寸。這是對(duì)瀏覽器的一個(gè)建議,php 也會(huì)檢查此項(xiàng)。在瀏覽器端可以簡(jiǎn)單繞過(guò)此設(shè)置,因此不要指望用此特性來(lái)阻擋大文件。實(shí)際上,php 設(shè)置中的上傳文件最大值是不會(huì)失效的。但是最好還是在表單中加上此項(xiàng)目,因?yàn)樗梢员苊庥脩粼诨〞r(shí)間等待上傳大文件之后才發(fā)現(xiàn)文件過(guò)大上傳失敗的麻煩。
注: 要確保文件上傳表單的屬性是 enctype="multipart/form-data",否則文件將無(wú)法上傳。
在處理上傳頁(yè)面中,上傳文件的信息是通過(guò)數(shù)組 $_FILES 來(lái)獲取的。我們假設(shè)文件上傳字段的名稱如上例所示,為 "upfile",則文件信息為:
$_FILES['upfile']['name']
上傳文件的原文件名。
$_FILES['upfile']['type']
文件的 MIME 類型,如果瀏覽器提供此信息的話。一個(gè)例子是“image/gif”。不過(guò)此 MIME 類型在 php 端并不檢查,因此不要想當(dāng)然認(rèn)為有這個(gè)值。
$_FILES['upfile']['size']
上傳文件的大小,單位為字節(jié)。
$_FILES['upfile']['tmp_name']
文件上傳后在服務(wù)端儲(chǔ)存的臨時(shí)文件名。
$_FILES['upfile']['error']
和該文件上傳相關(guān)的錯(cuò)誤代碼。
php 將隨文件信息數(shù)組一起返回一個(gè)對(duì)應(yīng)的錯(cuò)誤代碼。該代碼可以在文件上傳時(shí)生成的文件數(shù)組中的 error 字段中被找到。代碼如下:
UPLOAD_ERR_OK
其值為 0,文件上傳成功。
UPLOAD_ERR_INI_SIZE
其值為 1,上傳的文件超過(guò)了 php.ini 中 upload_max_filesize 選項(xiàng)限制的值 ,默認(rèn)值為2M。 如果要想上傳更大的,我們可以在php.ini里查找 upload_max_filesize = 2M 修改后即可生效。
UPLOAD_ERR_FORM_SIZE
其值為 2,上傳文件的大小超過(guò)了 HTML 表單中 MAX_FILE_SIZE 選項(xiàng)指定的值。
UPLOAD_ERR_PARTIAL
其值為 3,文件上傳不完全,只有部分被上傳。
UPLOAD_ERR_NO_FILE
其值為 4,文件上傳失敗。
UPLOAD_ERR_NO_TMP_DIR
其值為 6,找不到臨時(shí)文件夾。php 4.3.10 和 php 5.0.3 引進(jìn)。
UPLOAD_ERR_CANT_WRITE
其值為 7,文件寫入失敗。php 5.1.0 引進(jìn)。
注: 以上值在 php 4.3.0 之后變成了 php 常量。
action.php 的原代碼
<?
/**
歡迎光臨我們來(lái)我站交流學(xué)習(xí)經(jīng)驗(yàn)
*/
function getname($exname){
$dir = "tmp/";
$i=1;
if(!is_dir($dir)){
mkdir($dir,0777);
}
while(true){
if(!is_file($dir.$i.".".$exname)){
$name=$i.".".$exname;
break;
}
$i++;
}
return $dir.$name;
}
$exname=strtolower(substr($_FILES['upfile']['name'],(strrpos($_FILES['upfile']['name'],'.')+1)));
$uploadfile = getname($exname);
if (move_uploaded_file($_FILES['upfile']['tmp_name'], $uploadfile)) {
echo "<h2><font color=#ff0000>文件上傳成功!</font></h2><br><br>";
}else {
echo "<h2><font color=#ff0000>文件上傳失敗!</font></h2><br><br>";
}
echo "下面是文件上傳的一些信息:
<br><br>原文件名:".$_FILES['upfile']['name'] .
"<br><br>類型:" .$_FILES['upfile']['type'] .
"<br><br>臨時(shí)文件名:".$_FILES['upfile']['tmp_name'].
"<br><br>文件大小:".$_FILES['upfile']['size'] .
"<br><br>錯(cuò)誤代碼:".$_FILES['upfile']['error'];
?>
一定要確保上傳后文件所在的文件夾的權(quán)限至為 777 ,這點(diǎn)在服務(wù)器上體現(xiàn)的特別明顯,有時(shí)我們編寫的上傳代碼沒(méi)有任何的錯(cuò)誤,然而在網(wǎng)上卻無(wú)法實(shí)現(xiàn)上傳功能,原因就在這里。
本文只是講了如何通過(guò)php來(lái)實(shí)現(xiàn)文件上傳的,沒(méi)看過(guò)這部分的朋友可以參考一下。
php技術(shù):PHP中,文件上傳,轉(zhuǎn)載需保留來(lái)源!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。