PHP是一種將傳統(tǒng)的HTML網(wǎng)頁賦予動(dòng)態(tài)交互功能的語言,而POST方法則是HTTP協(xié)議中一種將數(shù)據(jù)傳輸?shù)椒?wù)器的方式。PHP中,我們可以利用POST方法上傳文件,本文將深入介紹PHP中POST方法上傳文件的使用方法以及實(shí)現(xiàn)技巧。
使用POST方法上傳文件,首先要確保HTML表單中上傳文件時(shí)指定了enctype="multipart/form-data"屬性,例如:
<form action="upload.php" method="post" enctype="multipart/form-data"> <input type="file" name="fileToUpload" id="fileToUpload"> <input type="submit" value="Upload File" name="submit"> </form>
其中,input標(biāo)簽的type屬性設(shè)置為file,只有這種類型的表單控件才允許用戶選擇文件上傳。name屬性設(shè)置為fileToUpload,它將作為POST請(qǐng)求中上傳的文件域的名稱,需要和后臺(tái)PHP代碼中對(duì)應(yīng)。submit按鈕則是用于提交上傳的文件。由于上傳文件的數(shù)據(jù)是不可讀的二進(jìn)制流,所以enctype屬性設(shè)置為multipart/form-data以便以這種方式傳輸數(shù)據(jù)。
PHP中,上傳文件時(shí)需要在后臺(tái)獲取用戶所上傳的文件內(nèi)容。我們可以使用$_FILES變量接受上傳的文件,例如:<?php $target_dir = "uploads/"; //指定上傳文件保存的目錄 $target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]); //指定上傳文件保存的完整路徑 $uploadOk = 1; //標(biāo)記是否上傳成功 $imageFileType = strtolower(pathinfo($target_file,PATHINFO_EXTENSION)); //獲取上傳文件的擴(kuò)展名 // Check if file already exists if (file_exists($target_file)) { echo "Sorry, file already exists."; $uploadOk = 0; } // Check file size if ($_FILES["fileToUpload"]["size"] > 500000) { echo "Sorry, your file is too large."; $uploadOk = 0; } // Allow certain file formats if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg" && $imageFileType != "gif" ) { echo "Sorry, only JPG, JPEG, PNG & GIF files are allowed."; $uploadOk = 0; } // Check if $uploadOk is set to 0 by an error if ($uploadOk == 0) { echo "Sorry, your file was not uploaded."; // if everything is ok, try to upload file } else { if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) { echo "The file ". basename( $_FILES["fileToUpload"]["name"]). " has been uploaded."; } else { echo "Sorry, there was an error uploading your file."; } } ?>
可以看到,在PHP中,$_FILES變量表示上傳的文件,其結(jié)構(gòu)如下:
Array ( [fileToUpload] => Array ( [name] => example.jpg [type] => image/jpeg [tmp_name] => /tmp/php/php6hst32 [error] => UPLOAD_ERR_OK [size] => 98174 ) )其中,$_FILES["fileToUpload"]["name"]存儲(chǔ)了上傳文件的原始文件名,$_FILES["fileToUpload"]["tmp_name"]存儲(chǔ)了上傳文件被保存在服務(wù)器上的臨時(shí)文件路徑,而$_FILES["fileToUpload"]["error"]存儲(chǔ)了上傳文件時(shí)可能出現(xiàn)的錯(cuò)誤信息。 在上述PHP代碼中,我們首先指定了上傳文件保存的目錄$target_dir和上傳文件保存的完整路徑$target_file。接著,我們進(jìn)行了一系列的檢查,例如檢查上傳文件是否已存在,檢查上傳文件的大小是否超出了限制,檢查上傳文件的擴(kuò)展名是否符合要求等等。最后,如果檢查通過,我們就使用move_uploaded_file函數(shù)將上傳的文件移動(dòng)到指定的目錄中。 使用POST方法上傳文件要注意以下幾點(diǎn): 1. 如果上傳文件的大小超出了限制,或者文件類型不正確,要及時(shí)給用戶反饋錯(cuò)誤信息。 2. 目錄要賦予寫權(quán)限,否則無法上傳文件。 3. 當(dāng)上傳文件時(shí),一定要使用合適的文件名,避免文件名不安全或重復(fù)。 4. 在后臺(tái)保存上傳的文件時(shí),不要使用原始文件名,尤其是不要直接將文件名用于SQL語句或HTML頁面中。 以上是對(duì)POST方法上傳文件在PHP中的介紹,希望能對(duì)大家有所幫助。