1. 程式人生 > >php進階——01 檔案上傳

php進階——01 檔案上傳

php.ini相關引數


file_uploads

是否允許PHP上傳檔案,預設為ON


upload_tmp_dir

上傳檔案在處理之前,必須先上傳到伺服器上的某個臨時資料夾;

此引數就是決定臨時目錄的路徑,此目錄需要有讀寫許可權。

一般不需要改。


max_input_time

對POST/GET/PUT方式接收資料的時間限制,單位s。


max_execution_time

等待指令碼執行完畢的最長時間,單位s。

如果需要上傳大檔案,此配置數值不能過小!


upload_max_filesize

允許上傳檔案的最大值,預設為2MB。


post_max_size

控制POST方式提交表單時,允許接收的最大資料量(MB);

由於POST資料除了檔案,還有可能包含其他表單資料,此值應大於upload_max_filesize的值。


memory_limit

PHP的記憶體使用上限,避免指令碼過量使用系統資源;

由於上傳是記憶體處理得資料中除了POST資料外可能包含其他資料,此值應大於post_max_size的值。



相關錯誤

這裡寫圖片描述




單檔案上傳


html程式碼

<form action="upload.php" method="post" enctype="multipart/form-data">
    <input name="upload" type="file">
    <input type="submit" value="上傳檔案">
</form>


php程式碼

1.我們通過$_FILES獲取上傳的檔案資訊;

2.它返回的值是一個數組:

[upload] => [
     [name] => 檔名
     [type] => 檔案型別
     [tmp_name] => 臨時路徑 + 臨時檔名
     [error] => 錯誤型別
     [size] => 大小
 ]

3.具體程式碼如下

 // 1.獲取錯誤碼
 $error = $_FILES['upload']['error'];

 // 2.臨時路徑名       ↓這裡的key和input的name一致
 $tmp_name = $_FILES['upload']['tmp_name'];

 // 3.目的路徑名
 $final_name = './upload/'.$_FILES['upload']['name'];


 // 4.錯誤校驗
 if($error){

     // 5.根據錯誤碼,返回相應錯誤資訊
    switch($error){
        case 1:
        case 2:
            echo "檔案大小超出限制";

        case 3:
            echo "檔案上傳不完整";

        case 4:
            echo "未選中上傳檔案";
     }

// 6.如果沒有錯誤
}else{

    // 7.移動上傳的檔案
    $result = move_uploaded_file($tmp_name, $final_name);

    // 8.輸出資訊
    echo $result ? "上傳成功" : "上傳失敗";
}