PHP-上傳文件
阿新 • • 發佈:2018-03-17
ech 進行 找不到 shell use cut cas 過濾 null
php.ini中和和文件上傳相關的選項
指令名 | 默認值 | 描述 |
file_uploads | ON | 服務器上的php腳本是否可以接受文件上傳 |
max_execution_time | 30 | PHP腳本在註冊一個致命錯誤之前可以執行的最長時間,以秒為單位 |
memory_limit | 128MB | 設置PHP腳本可以分配到的最大內存,以MB為單位,這樣可以防止失控的腳本獨占服務器內存 |
upload_max_filesize | 2MB | 設置上傳文件的大小的最大值,以MB為單位。此指令必須小於post_max_size |
upload_tmp_dir | NULL | 設置文件上傳後存放的臨時目錄 |
post_max_size | 8M | 通過POST方式發送信息的大小,以MB為單位 |
用來上傳文件的php腳本
<form enctype="multipart/form-data" action="upload.php" method="post"> <input type="hidden" name="MAX_FILE_SIZE" value="2000000" /> 上傳文件:<input type="file" name="userfile" /> <input type="submit" value="上傳" /> </form>
POST方式發送文件到upload.php進行處理
選擇本地的一個shell.jpg文件
upload.php中的內容
<?php //打印文件信息的數組 print_r($_FILES); ?>
點擊上傳
全局數組$_FILES中的元素說明
數組 | 描述 |
$_FILES[‘userfile‘][‘name‘] | 上傳的文件的文件名 |
$_FILES[‘userfile‘][‘type‘] | 上傳的文件的文件類型 |
$_FILES[‘userfile‘][‘tmp_name‘] | 上傳的文件臨時存放地址 |
$_FILES[‘userfile‘][‘error‘] | 上傳的文件的錯誤類型 |
$_FILES[‘userfile‘][‘size‘] | 上傳的文件的大小 |
對上傳的文件進行過濾和處理
<?php //允許上傳的文件類型 $allow_type = [‘image/jpeg‘, ‘image/png‘, ‘image/pjpeg‘, ‘image/x-png‘, ‘image/gif‘]; //判斷上傳的類型是否被允許 if (!in_array($_FILES[‘userfile‘][‘type‘], $allow_type)){ echo "<script>alert(‘只允許上傳jpg/png/gif類型的圖片‘)</script>"; exit; } //判斷上傳過程中是否發生錯誤 if ($_FILES[‘userfile‘][‘error‘] != 0){ switch ($_FILES[‘userfile‘][‘error‘]) { case 1: echo "<script>alert(‘上傳文件的大小超過了php.ini中upload_max_filesize的約定值‘)</script>"; break; case 2: echo "<script>alert(‘上傳文件的大小超過了上傳表單max_file_size規定的最大值‘)</script>"; break; case 3: echo "<script>alert(‘文件只被部分上傳‘)</script>"; break; case 4: echo "<script>alert(‘文件沒有被上傳‘)</script>"; break; } exit; } //用來再次判斷上傳文件的大小 define(‘MAX_SIZE‘, 2000000); if ($_FILES[‘userfile‘][‘size‘] > MAX_SIZE){ echo "<script>alert(‘上傳的文件大小不能超過2M‘)</script>"; exit; } //判斷目錄是否存在 define(‘URL‘, dirname(__FILE__).‘\files‘); if (!is_dir(URL)) { mkdir(URL); } //把文件從臨時文件夾移動到指定文件夾 if (is_uploaded_file($_FILES[‘userfile‘][‘tmp_name‘])){ if (!@move_uploaded_file($_FILES[‘userfile‘][‘tmp_name‘], URL.‘/‘.$_FILES[‘userfile‘][‘name‘])){ echo "<script>alert(‘移動失敗‘);history.back();</script>"; exit; } }else { echo "<script>alert(‘臨時文件夾找不到文件‘);history.back();</script>"; exit; } //經過以上過濾,符合條件的文件上傳成功,執行以下語句 echo "<script>alert(‘文件上傳成功‘);location.href=‘url.php?url=files/".$_FILES[‘userfile‘][‘name‘]."‘".";</script>"; ?>
上傳文件
然後跳轉到http://127.0.0.1/upload/url.php?url=files/shell.jpg
PHP-上傳文件