本文提供一個輕量級的 PHP 檔案上傳後台,內建 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);
}
upload/ 目錄並設定 chmod 755,確保 PHP 可寫入$admin_pw 為強密碼,建議改用 password_hash() 儲存雜湊值['jpg','png','pdf'])並檢查 MIME.htaccess 禁止腳本執行:SetHandler default-handler