PHP實現文件的上傳

通過PHP將文件上傳到服務器
1、先創建一個上傳表單:index.php

<html>
<head>
<meta charset="utf-8">
<title>PHP實現文件上傳</title>
</head>
<body>
<form action="upload.php" method="post" enctype="multipart/form-data">
<label for="file">文件名:</label>
<input type="file" name="file" id="file"><br>
<input type="submit" name="submit" value="提交">
</form>
</body>
</html>

2、創建上傳腳本

<?php
// 允許上傳的圖片後綴
$allowedExts = array("gif", "jpeg", "jpg", "png");
$temp = explode(".", $_FILES["file"]["name"]);
echo $_FILES["file"]["size"];
$extension = end($temp);     // 獲取文件後綴名
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/jpg")
|| ($_FILES["file"]["type"] == "image/pjpeg")
|| ($_FILES["file"]["type"] == "image/x-png")
|| ($_FILES["file"]["type"] == "image/png"))
&& ($_FILES["file"]["size"] < 204800)   // 小於 200 kb
&& in_array($extension, $allowedExts))
{
    if ($_FILES["file"]["error"] > 0)
    {
        echo "錯誤:: " . $_FILES["file"]["error"] . "<br>";
    }
    else
    {
        echo "上傳文件名: " . $_FILES["file"]["name"] . "<br>";
        echo "文件類型: " . $_FILES["file"]["type"] . "<br>";
        echo "文件大小: " . ($_FILES["file"]["size"] / 1024) . " kB<br>";
        echo "文件臨時存儲的位置: " . $_FILES["file"]["tmp_name"] . "<br>";

        // 判斷當期目錄下的 upload 目錄是否存在該文件
        // 如果沒有 upload 目錄,你需要創建它,upload 目錄權限爲 777
        if (file_exists("upload/" . $_FILES["file"]["name"]))
        {
            echo $_FILES["file"]["name"] . " 文件已經存在。 ";
        }
        else
        {
            // 如果 upload 目錄不存在該文件則將文件上傳到 upload 目錄下
            move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . $_FILES["file"]["name"]);
            echo "文件存儲在: " . "upload/" . $_FILES["file"]["name"];
        }
    }
}
else
{
    echo "非法的文件格式";
}
?>

3、另一種實現方法(上傳頭像爲例,思想來自於最近的一個項目)

    //實現文件(用戶頭像)的上傳
    if($_SESSION['user_id']==''){
        //如果用戶的ID爲空,說明沒有登錄
        //實現跳轉的兩種方式
        header('Location:login.php');
        //echo '<script>window.location.href='"login.php"'</script>';
    }
    print_r($_FILES);
    $fileError='';                        //錯誤類型
    $allowedExit = array(                   //允許上傳的文件格式
        'jpg',
        'png',
        'gif',
        'bmp',
        'jpeg',
        );
        if ($_FILES['face'] == '') { //上傳文件爲空
    echo '沒有上傳';
} else {
        if ($_FILES['face']['error'] == 0) {     //錯誤代碼爲0,表示上傳的文件沒有錯誤
        $ext = strtolower(pathinfo($_FILES['face']['name'],PATHINFO_EXTENSION));
        //$ext 提取上傳文件的後綴
        //strtolower()函數將所有後綴轉化爲小寫
        //pathinfo() 函數以數組的形式返回文件路徑的信息
        //PATHINFO_DIRNAME - 只返回 dirname(路徑)
        // PATHINFO_BASENAME - 只返回 basename(文件名)
        // PATHINFO_EXTENSION - 只返回 extension(後綴)
        //eg.<?php
        //print_r(pathinfo("/testweb/test.txt",PATHINFO_BASENAME));
        //輸出:test.txt
        print_r($ext);
        if (!in_array($ext,$allowExtArray)) {
            $fileError .= '上傳格式不被允許';
        }else {
            if (!is_dir('uploads')) { //判斷uploads文件夾是否存在
                mkdir('uploads'); //創建uploads文件夾
            }
            $newFileName = date('Y-m-d H:i:s',time()).rand(0,100000);//給上傳的文件改名字 以時間爲格式 仿製同一時間傳 後面加一個隨機數
            move_uploaded_file($_FILES['face']['tmp_name'],'uploads/'.$newFileName.'.'.$ext);
            //move_uploaded_file() 函數將上傳的文件移動到新位置 將要上傳的文件保存到uploads文件夾下
        }
    } else {
        switch ($_FILES['face']['error']) {   //如果上傳的文件有錯誤進行報錯
            case '1':
                $fileError = '上傳文件大小超過服務器允許上傳的最大值';
                break;
            case '2':
            $fileError = '上傳文件大小超過HTML表單中隱藏域MAX_FILE_SIZE選項指定的值';
                break;
     // 0——沒有錯誤發生,文件上傳成功。 
     // 1——上傳的文件超過了 php.ini 中 upload_max_filesize 選項限制的值。 
     // 2——上傳文件的大小超過了 HTML 表單中 MAX_FILE_SIZE 選項指定的值。 
     // 3——文件只有部分被上傳。 
     // 4——沒有文件被上傳。 
        }
        echo '發生錯誤:'.$fileError;
    }
}
print_r($_SESSION);
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章