PHP - 檔案上傳



在典型的PHP Web應用程式中,一個常見的需求是允許使用者上傳檔案。在PHP中,從客戶端上傳檔案非常容易。本章我們將學習如何使用PHP指令碼進行檔案上傳過程。

檔案上傳過程遵循以下步驟:

  • 使用者開啟包含HTML表單的頁面,該表單包含文字檔案、瀏覽按鈕和提交按鈕。

  • 使用者單擊瀏覽按鈕,並從本地電腦選擇要上傳的檔案。

  • 所選檔案的完整路徑顯示在文字欄位中,然後使用者單擊提交按鈕。

  • 所選檔案被髮送到伺服器上的臨時目錄。

  • 在表單的action屬性中指定為表單處理程式的PHP指令碼檢查檔案是否已到達,然後將檔案複製到目標目錄。

  • PHP指令碼向用戶確認成功。

為了執行此操作,我們必須首先確保在“php.ini”中啟用了與檔案上傳相關的配置設定。

開啟“php.ini”檔案,並確保透過刪除file_uploads、upload_tmp_dir、upload_max_filesize和max_file_uploads引數前的分號(;)來啟用以下設定:

;;;;;;;;;;;;;;;;
; File Uploads ;
;;;;;;;;;;;;;;;;

; Whether to allow HTTP file uploads.
; https://php.net.tw/file-uploads
file_uploads=On

; Temporary directory for HTTP uploaded files (will use system
; default if not specified).
; https://php.net.tw/upload-tmp-dir
upload_tmp_dir="C:\xampp\tmp"

; Maximum allowed size for uploaded files.
; https://php.net.tw/upload-max-filesize
upload_max_filesize=40M

; Maximum number of files that can be uploaded via a single request
max_file_uploads=20

臨時位置和最終位置的資料夾都必須設定允許檔案寫入的許可權。如果任何一個設定為只讀,則程序將失敗。

建立檔案上傳表單

接下來,我們需要設計一個用於檔案上傳的HTML表單。表單的method屬性必須為POST,enctype必須為multipart/form-data。使用input型別為file,允許使用者瀏覽並選擇要上傳的檔案。

<h2>File Upload Form</h2>
<form method = "POST" action = "uploadfile.php" enctype="multipart/form-data">
   <label for="file">File name:</label>
   <input type="file" name="uploadfile" />
   <input type="submit" name="submit" value="Upload" />
</form>

建立上傳指令碼

uploadfile.php指令碼接收上傳的檔案。檔案資料收集在超全域性變數$_FILES中。獲取上傳檔案的name、file type、size和tmp_name屬性。

move_uploaded_file()函式將選定的檔案複製到文件資料夾。

<?php
   echo "<b>File to be uploaded: </b>" . $_FILES["uploadfile"]["name"] . "<br>";
   echo "<b>Type: </b>" . $_FILES["uploadfile"]["type"] . "<br>";
   echo "<b>File Size: </b>" . $_FILES["uploadfile"]["size"]/1024 . "<br>";
   echo "<b>Store in: </b>" . $_FILES["uploadfile"]["tmp_name"] . "<br>";

   if (file_exists($_FILES["uploadfile"]["name"])){
      echo "<h3>The file already exists</h3>";
   } else {
      move_uploaded_file($_FILES["uploadfile"]["tmp_name"], $_FILES["uploadfile"]["name"]);
      echo "<h3>File Successfully Uploaded</h3>";
   }
?>

假設myform.php和uploadfile.php這兩個檔案都儲存在文件資料夾中。

在瀏覽器中開啟“myform.php”(**https:///myform.php**):

PHP File Uploading 1

單擊**檔案**按鈕,瀏覽到要上傳的目標檔案,然後單擊**上傳**按鈕。

伺服器將返回以下訊息:

PHP File Uploading 2
廣告