服務端php之文件上傳
阿新 • • 發佈:2019-05-07
warn 編碼 === pic 單個 自動獲取 服務端 erro als
知識點
- echo $_SERVER[‘PHP_SELF‘]; 自動獲取當前文件的路勁(即提交地址為當前頁面)
- 當一個表單有文件域(即文件上傳)的時候,method(提交方式)要設置post,這樣更加安全,enctype這個屬性為編碼類型,固定格式為 multipart/form-data
- 當文件上傳成功後,系統會在服務端開辟一個臨時目錄來存放上傳的文件,而上傳之後,會立馬消除這個目錄
- UPLOAD_ERR_OK(這是一個記號,其值為0時)
- PHP 中設置全局變量的兩種方式:
- (1) global $message;
- (2) $GLOBALS[‘message‘]
$avator[‘error‘]分析
- 其值為0(UPLOAD_ERR_OK)時:表示文件上傳成功
- 其值為1(UPLOAD_ERR_INT_SIZE):表示文件超過了 php.ini 文檔中的 upload_max_filesize (服務端支持的單個文件上傳的大小)的值。當出現這個情況時,只要根據情況增大這個值即可
- 其值為2(UPLOAD_ERR_FORM_SIZE):表示上傳的文件超過了HTML表單中MAX_FILE_SIZE選項指定的值
- 其值為3(UPLOAD_ERR_PARTIAL):表示只有部分被上傳
- 其值為4(UPLOAD_ERR_NO_FILE):表示沒有文件被上傳
錯誤分析
- Warning: POST Content-Length of 17545049 bytes exceeds the limit of 8388608 bytes in Unknown on line 0
- 當出現上面這句警告的時候,表示超過了服務端所支持的最大的請求體的體積,只需再 php.ini 文檔中增大 post_max_size 的大小即可
測試代碼
html
<form action="<?php echo $_SERVER[‘PHP_SELF‘]; ?>" method="post" enctype="multipart/form-data"> <input type="file" name="avator"> <button type="submit">上傳</button> <!-- 當 $message 有值的時候顯示 --> <?php if (isset($message)): ?> <p style="color: red;"><?php echo $message; ?></p> <?php endif ?> </form>
php
<?php function upload () { if (empty($_FILES[‘avator‘])) { // $message 要設置為全局變量 $GLOBALS[‘message‘] = ‘親,您傳的是什麽啊!‘; return; } $avator = $_FILES[‘avator‘]; // $avator => array(5) { // ["name"]=> // string(9) "pic02.jpg" // ["type"]=> // string(10) "image/jpeg" // ["tmp_name"]=> // string(26) "C:\Windows\Temp\phpBBB.tmp" //臨時目錄 // ["error"]=> // int(0) // ["size"]=> // int(560586) // } echo $avator[‘error‘]; // // 上傳失敗時,$avator[‘error‘] = 4 // echo $avator[‘error‘]; // UPLOAD_ERR_OK === 0 if ($avator[‘error‘] !== UPLOAD_ERR_OK) { // 服務端沒有接收到上傳的文件 $GLOBALS[‘message‘] = ‘上傳失敗‘; return; } // 接收到了文件 // 將文件從臨時目錄移動到網站根目錄 $source_file = $avator["tmp_name"]; //源文件 // 移動的目錄路勁中文件夾必須先存在,否則報錯 $target_file = ‘uploadFile/‘ . $avator["name"];//目標放在哪裏 $moved = move_uploaded_file($source_file, $target_file); if (!$moved) { $GLOBALS[‘message‘] = ‘上傳失敗‘; return; } // 移動成功(上傳成功) echo ‘親,上傳成功了喲!‘; } if ($_SERVER[‘REQUEST_METHOD‘] === ‘POST‘) { upload(); } ?>
服務端php之文件上傳