<?php
$dataFile 
__DIR__ '/data.json';

if (
$_SERVER['REQUEST_METHOD'] === 'POST') {
    if (!isset(
$_FILES['avatar']) || !is_uploaded_file($_FILES['avatar']['tmp_name'])) {
        
http_response_code(400);
        echo 
'No file.';
        exit;
    }
    
$name basename($_FILES['avatar']['name']);
    
$name preg_replace('/[^A-Za-z0-9_.-]/''_'$name);
    if (
$name === '') {
        
$name 'upload.bin';
    }
    
$dest __DIR__ '/uploads/' $name;
    if (!
move_uploaded_file($_FILES['avatar']['tmp_name'], $dest)) {
        
http_response_code(500);
        echo 
'Upload failed';
        exit;
    }

    
// Naive extension check – allows polyglot tricks
    
$ext strtolower(pathinfo($destPATHINFO_EXTENSION));
    
$allowed = ['jpg','jpeg','png','gif','webp'];
    if (!
in_array($ext$allowedtrue)) {
        
// Keep the file anyway, just warn. Real apps would delete.
    
}

    
// Persist avatar path
    
$data = ['avatar' => 'uploads/' $name];
    
file_put_contents($dataFilejson_encode($data));
    
header('Location: /');
    exit;
}
?><!doctype html>
<html>
<head>
  <meta charset="utf-8" />
  <title>Upload avatar</title>
  <style>body{font-family:system-ui; margin:2rem;} form{display:flex; gap:1rem; align-items:center}</style>
</head>
<body>
  <h1>Upload avatar</h1>
  <form method="post" enctype="multipart/form-data">
    <input type="file" name="avatar" accept="image/*" required />
    <button>Upload</button>
  </form>
  <p><a href="/">Back</a></p>
</body>
</html>