天天看點

***使用PHP實作檔案上傳和多檔案上傳

<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>頁面的詳細代碼如下:

&lt;?php

//設定編碼為UTF-8,以避免中文亂碼

header('Content-Type:text/html;charset=utf-8');

?&gt;

&lt;!DOCTYPE html&gt;

&lt;html&gt;

&lt;head&gt;

    &lt;title&gt;檔案上傳表單頁面&lt;/title&gt;

&lt;/head&gt;

&lt;body&gt;

&lt;form action="upload.php" method="post" enctype="multipart/form-data"&gt;

檔案1:&lt;input name="upload_file1" type="file" /&gt;&lt;br/&gt;

檔案2:&lt;input name="upload_file2" type="file" /&gt;&lt;br/&gt;

&lt;input type="submit" value="上傳" /&gt;

&lt;/form&gt;

&lt;/body&gt;

&lt;/html&gt;

值得注意的是,由于在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]上傳成功!&lt;br/&gt;';

}else{

    echo '[檔案1]上傳失敗!&lt;br/&gt;';

}

//處理上傳的檔案2

if ($second_file['error'] == UPLOAD_ERR_OK){

    $temp_name = $second_file['tmp_name'];

    //上傳檔案2在用戶端計算機上的真實名稱

    $file_name = $second_file['name'];

    echo '[檔案2]上傳成功!&lt;br/&gt;';

}else {

    echo '[檔案2]上傳失敗!&lt;br/&gt;';

在上面的例子中,我們上傳的兩個檔案參數名分别為<code>upload_file1</code>和<code>upload_file2</code>。現在,我們讓表單中的多個檔案以相同的參數名<code>upload_file</code>,将剛才上傳的兩個檔案以參數數組形式再次送出上傳。此時,我們需要将<code>index.php</code>頁面中的兩個file檔案域修改為如下html代碼:

檔案1:&lt;input name="upload_file[]" type="file" /&gt;&lt;br/&gt;

檔案2:&lt;input name="upload_file[]" type="file" /&gt;&lt;br/&gt;

$fileArray = $_FILES['upload_file'];//擷取多個檔案的資訊,注意:這裡的鍵名不包含[]

$upload_dir = 'D:/upload/'; //儲存上傳檔案的目錄

foreach ( $fileArray['error'] as $key =&gt; $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.']成功!&lt;br/&gt;';

    }else {

        echo '上傳[檔案'.$key.']失敗!&lt;br/&gt;';

    }

備注2:上述處理檔案上傳的PHP代碼隻是一個簡單的入門示例,并不能直接作為正式代碼使用,因為還有許多需要額外注意的安全因素沒有考慮,例如:檔案的類型、檔案的大小以及上傳檔案的名稱重複等。

如何聯系我:【萬裡虎】www.bravetiger.cn

【QQ】3396726884 (咨詢問題100元起,幫助解決問題500元起)

【部落格】http://www.cnblogs.com/kenshinobiy/