1. 程式人生 > >服務端php之文件上傳

服務端php之文件上傳

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之文件上傳