首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 簡易登入式檔案上傳管理系統實作

     編輯:PHP 相關知識

本文提供一個輕量級的 PHP 檔案上傳後台,內建 Session 登入驗證、圖形驗證碼、檔案重命名防衝突等功能,適合快速部署內部素材管理需求。

系統功能架構

  • 身份驗證:固定密碼 + Session + 圖形驗證碼(干擾線、隨機字元)
  • 檔案上傳:支援任意副檔名,自動以「原名_隨機數.副檔名」避免覆蓋
  • 安全機制:限制直存上傳目錄、記錄上傳日誌、登出銷毀 Session
  • 介面簡潔:單檔案包含邏輯與視圖,零依賴即可執行

核心程式碼結構

<?php
session_start();
$admin_pw = 'admin';
$uploaddir = 'upload';

// 驗證碼產生
if ($_GET['action'] === 'getcode') { setcode(); exit; }

// 登入處理
if ($_POST['password'] === $admin_pw && $_POST['yz'] === $_SESSION['yzcode']) {
    $_SESSION['logined'] = $admin_pw;
}

// 登出
if ($_GET['action'] === 'logout') {
    $_SESSION['logined'] = '';
    header('Location: '.$_SERVER['PHP_SELF']);
    exit;
}

// 未登入顯示登入表單
if ($_SESSION['logined'] !== $admin_pw) { /* 輸出登入 HTML */ exit; }

// 已登入:處理上傳
if ($_POST['ac'] === 'upload') {
    $ext = pathinfo($_FILES['file']['name'], PATHINFO_EXTENSION);
    $name = basename($_FILES['file']['name'], '.'.$ext);
    $filename = "$uploaddir/{$name}_".mt_rand(1,999999999).".$ext";
    while (file_exists($filename)) {
        $filename = "$uploaddir/{$name}_".mt_rand(1,999999999).".$ext";
    }
    if (move_uploaded_file($_FILES['file']['tmp_name'], $filename)) {
        $url = "https://{$_SERVER['HTTP_HOST']}".dirname($_SERVER['REQUEST_URI'])."/$filename";
        echo "上傳成功!
網址: 預覽"; } else { echo "上傳失敗"; } } // 輸出上傳表單與登出連結 ?>

驗證碼實作細節

function setcode() {
    header('Content-type: image/gif');
    $w = 60; $h = 20; $im = imagecreate($w, $h);
    $bg = imagecolorallocate($im, 255, 255, 255);
    imagefill($im, 0, 0, $bg);
    $code = '';
    for ($i=0; $i<4; $i++) {
        $char = mt_rand(0,1) ? 'abcdefghjkmnpqrstuvwxyz' : '0123456789';
        $c = $char[mt_rand(0, strlen($char)-1)];
        $code .= $c;
        $color = imagecolorallocate($im, mt_rand(0,100), mt_rand(0,100), mt_rand(0,100));
        imagechar($im, 5, 4+$i*15, 3, $c, $color);
    }
    $_SESSION['yzcode'] = $code;
    imagegif($im); imagedestroy($im);
}

部署與安全建議

  1. 建立 upload/ 目錄並設定 chmod 755,確保 PHP 可寫入
  2. 修改 $admin_pw 為強密碼,建議改用 password_hash() 儲存雜湊值
  3. 生產環境務必加入檔案型別白名單(如 ['jpg','png','pdf'])並檢查 MIME
  4. 上傳目錄設定 .htaccess 禁止腳本執行:SetHandler default-handler
  5. 考慮加入 CSRF Token 防禦跨站請求偽造
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved