<a href="http://www.365mini.com/page/php-upload-file.htm" target="_blank">http://www.365mini.com/page/php-upload-file.htm</a>
在PHP程式開發中,檔案上傳是一個使用非常普遍的功能,也是PHP程式員的必備技能之一。值得高興的是,在PHP中實作檔案上傳功能要比在Java、C#等語言中簡單得多。下面我們結合具體的代碼執行個體來詳細介紹如何通過PHP實作檔案上傳和多檔案上傳功能。
要使用PHP實作檔案上傳功能,我們先來編寫兩個php檔案:<code>index.php</code>和<code>upload.php</code>。其中,<code>index.php</code>頁面用于送出檔案上傳的表單請求,<code>upload.php</code>頁面用于接收上傳的檔案并進行相應處理。
首先,我們來編寫一個簡單的<code>index.php</code>檔案,由于其中涉及的主要是html代碼,比較簡單,是以不再贅述,<code>index.php</code>頁面的詳細代碼如下:
<?php
//設定編碼為UTF-8,以避免中文亂碼
header('Content-Type:text/html;charset=utf-8');
?>
<!DOCTYPE html>
<html>
<head>
<title>檔案上傳表單頁面</title>
</head>
<body>
<form action="upload.php" method="post" enctype="multipart/form-data">
檔案1:<input name="upload_file1" type="file" /><br/>
檔案2:<input name="upload_file2" type="file" /><br/>
<input type="submit" value="上傳" />
</form>
</body>
</html>
值得注意的是,由于在HTTP協定設計之初,它并不支援檔案上傳功能,<code>form</code>表單的<code>encrypt</code>屬性的預設值為<code>application/x-www-form-urlencoded</code>,它隻能用于送出一般的表單請求。如果送出的表單中包含需要上傳的檔案,我們需要将<code>enctype</code>的屬性值改為<code>multipart/form-data</code>才能實作檔案上傳功能。此外,<code>method</code>的屬性值必須為<code>post</code>。
接着,我們繼續編寫<code>upload.php</code>檔案的代碼。
$first_file = $_FILES['upload_file1']; //擷取檔案1的資訊
$second_file = $_FILES['upload_file2']; //擷取檔案2的資訊
$upload_dir = 'D:/upload/'; //儲存上傳檔案的目錄//處理上傳的檔案1
if ($first_file['error'] == UPLOAD_ERR_OK){
//上傳檔案1在伺服器上的臨時存放路徑
$temp_name = $first_file['tmp_name'];
//上傳檔案1在用戶端計算機上的真實名稱
$file_name = $first_file['name'];
//移動臨時檔案夾中的檔案1到存放上傳檔案的目錄,并重命名為真實名稱
move_uploaded_file($temp_name, $upload_dir.$file_name);
echo '[檔案1]上傳成功!<br/>';
}else{
echo '[檔案1]上傳失敗!<br/>';
}
//處理上傳的檔案2
if ($second_file['error'] == UPLOAD_ERR_OK){
$temp_name = $second_file['tmp_name'];
//上傳檔案2在用戶端計算機上的真實名稱
$file_name = $second_file['name'];
echo '[檔案2]上傳成功!<br/>';
}else {
echo '[檔案2]上傳失敗!<br/>';
在上面的例子中,我們上傳的兩個檔案參數名分别為<code>upload_file1</code>和<code>upload_file2</code>。現在,我們讓表單中的多個檔案以相同的參數名<code>upload_file</code>,将剛才上傳的兩個檔案以參數數組形式再次送出上傳。此時,我們需要将<code>index.php</code>頁面中的兩個file檔案域修改為如下html代碼:
檔案1:<input name="upload_file[]" type="file" /><br/>
檔案2:<input name="upload_file[]" type="file" /><br/>
$fileArray = $_FILES['upload_file'];//擷取多個檔案的資訊,注意:這裡的鍵名不包含[]
$upload_dir = 'D:/upload/'; //儲存上傳檔案的目錄
foreach ( $fileArray['error'] as $key => $error) {
if ( $error == UPLOAD_ERR_OK ) { //PHP常量UPLOAD_ERR_OK=0,表示上傳沒有出錯
$temp_name = $fileArray['tmp_name'][$key];
$file_name = $fileArray['name'][$key];
move_uploaded_file($temp_name, $upload_dir.$file_name);
echo '上傳[檔案'.$key.']成功!<br/>';
}else {
echo '上傳[檔案'.$key.']失敗!<br/>';
}
備注2:上述處理檔案上傳的PHP代碼隻是一個簡單的入門示例,并不能直接作為正式代碼使用,因為還有許多需要額外注意的安全因素沒有考慮,例如:檔案的類型、檔案的大小以及上傳檔案的名稱重複等。
如何聯系我:【萬裡虎】www.bravetiger.cn
【QQ】3396726884 (咨詢問題100元起,幫助解決問題500元起)
【部落格】http://www.cnblogs.com/kenshinobiy/