PHP開發筆記系列(八)- 上傳與下載
??? 最近由於項目需要,在GZBGY進行了閉關,與同行的Developer進行了深入的交流,成果不賴。丟下了《PHP開發筆記系列(XAMPP+PhpEclipse+XDebug)》,今天重新更新一下,這次講上傳下載。
?
??? 上傳與下載兩個功能是再正常不過的準系統,在java的開發中,下載會使用File類將檔案內容以流的形式寫入到response中,並設定相應和http header,讓瀏覽器識別本次是檔案下載。在PHP中也是類似,本文《PHP開發筆記系列(八)- 上傳與下載》將是《PHP開發筆記系列(XAMPP+PhpEclipse+XDebug)》的第八篇,講述如何使用PHP完成檔案的上傳與下載操作。
??? 1. 檔案下載
??? 檔案下載的操作分為兩部分,步驟:1)設定http header,2)讀取檔案。這裡我們編寫兩個php指令碼,第一個為file-list.php,用來顯示當前檔案夾下的所有檔案夾和檔案,供下載,第二個為download.php,具體的下載代碼。代碼如下:
?
file:file-list.phpurl:http://localhost:88/download-upload/file-list.php'; }elseif (is_file($entry)) { echo '[FILE] '.$entry. '
'; } } closedir($dp); echo "upload";?>?
?
file:download.phpurl:http://localhost:88/download-upload/download.php?filename=xxx
?
??? 2. 檔案上傳
??? 在PHP中,檔案上傳非常簡單,因為php已經自動識別enctype為"multipart/form-data"的請求,自動將裡面的檔案域中的內容upload到php的tmp檔案夾中,我們可以過$_FILES["檔案網域名稱稱"]["屬性"],如$_FILES["file"]["name"]表示上傳檔案的原始名稱、$_FILES["file"]["type"]表示上傳檔案的類型、$_FILES["file"]["tmp_name"]表示上傳檔案在php臨時檔案夾中的路徑。由於產生的臨時檔案會被清空,因此我們需要使用move_uploaded_file()函數將臨時檔案移動到我們的指定目錄中,其中第一個參數為臨時檔案的路徑,第二個參數為目標檔案的路徑。代碼如下:
?
file:upload-form.phpurl:http://localhost:88/download-upload/upload-form.php
?
?
file:upload.phpurl:http://localhost:88/download-upload/upload.php 0){ echo "Error: ".$_FILES["file"]["error"] . "
";}else{ echo "Upload: ".$_FILES["file"]["name"]."
"; echo "Type: ".$_FILES["file"]["type"]."
"; echo "Size: ".($_FILES["file"]["size"] / 1024)." Kb
"; echo "Temp file: ".$_FILES["file"]["tmp_name"]."
"; move_uploaded_file($_FILES["file"]["tmp_name"], $_FILES["file"]["name"]); echo "file-list";}?>?
?? 本文地址:http://ryan-d.iteye.com/blog/1546706
?
?