關於 PHP 上傳檔案這件事情有很多東西可以討論,像是篩選上傳的檔案格式、檔案大小...之類的。在 Day 29 我們要討論一句話木馬的運作原理,所以要先了解 PHP 怎麼上傳檔案。其實是快想不到要寫什麼了
首先我們先準備一個上傳檔案的表單
<form action='upload.php' method='post' enctype='multipart/form-data'>
<input type='file' name='file'><br>
<input type='submit'>
</form>
這樣就完成簡易的表單了,接著要完成接收表單的 PHP
<?php
if($_FILES['file']['error'] === UPLOAD_ERR_OK){
echo 'Name: '.$_FILES['file']['name'];
echo '<br>Type: '.$_FILES['file']['type'];
echo '<br>Size: '.$_FILES['file']['size'];
echo '<br>TmpName: '.$_FILES['file']['tmp_name'];
move_uploaded_file($_FILES['file']['tmp_name'],'upload/'.$_FILES['file']['name']);
}
?>
這樣可以觀察上傳檔案的一些屬性,於是我們上傳一個檔案試試看
這樣檔案就上傳完成囉
解釋一下程式碼,檔案是以 Post 方式送到 PHP ,但是 PHP 接收檔案會使用 $_FILES
這個變數。以陣列的方式紀錄收到的資料的資訊,上面那些陣列的 Key 值應該都滿明顯的。
值得一提的是,PHP 上傳的時候有一個機制。會先把上傳的檔案放到 temp 這個資料夾中,等 PHP 執行結束後會被刪除。因此,如果需要保留檔案,就需要使用到 move_uploaded_file()
這個方法。
另外,也可以使用 file_exists()
這個方法檢查檔案是否已經存在,否則如果有相同檔案名稱的檔案會被覆蓋掉的喔。