'jpg', 'image/png' => 'png', 'image/webp' => 'webp' ]; $finfo = new finfo(FILEINFO_MIME_TYPE); $mime = $finfo->file($tmp); if (!$mime || !isset($allowedMimeToExt[$mime])) { header('Location: account.php?upload=err'); exit(); } $ext = $allowedMimeToExt[$mime]; // Wichtig: Auf Linux ist ein Pfad mit führendem "/" ein Pfad ab Dateisystem-Root. // Für move_uploaded_file() brauchen wir einen Dateisystempfad; die Public-URL ist separat. $documentRoot = isset($_SERVER['DOCUMENT_ROOT']) ? (string)$_SERVER['DOCUMENT_ROOT'] : ''; $webRoot = rtrim($documentRoot, "\\/"); $targetDir = $webRoot !== '' ? $webRoot . '/FSST/Website' : __DIR__ . '/FSST/Website/assets/images/profilePictures'; if (!is_dir($targetDir)) { $mkOk = @mkdir($targetDir, 0755, true); if (!$mkOk) { error_log('Upload: mkdir failed for ' . $targetDir); header('Location: account.php?upload=err'); exit(); } } if (!is_writable($targetDir)) { error_log('Upload: targetDir not writable: ' . $targetDir); header('Location: account.php?upload=err'); exit(); } // Fallback-kompatibler Name (auch ohne random_bytes) $rand = uniqid('', true); $rand = str_replace('.', '', $rand); $filename = 'user_' . $userId . '_' . $rand . '.' . $ext; $targetPath = rtrim($targetDir, "\\/") . DIRECTORY_SEPARATOR . $filename; if (!move_uploaded_file($tmp, $targetPath)) { $lastErr = error_get_last(); $lastErrMsg = (is_array($lastErr) && isset($lastErr['message'])) ? (string)$lastErr['message'] : 'unknown'; error_log('Upload: move_uploaded_file failed to ' . $targetPath . ' - ' . $lastErrMsg); header('Location: account.php?upload=err'); exit(); } // Pfad, der in HTML genutzt wird (URL relativ zur Webroot) $publicPath = 'assets/images/profilePictures/' . $filename; $servername = "localhost"; $port = 3306; $username = "FSST"; $password = "L9wUNZZ9Qkbt"; $db = "FSST"; $conn = mysqli_connect($servername, $username, $password, $db, $port); if (!$conn) { header('Location: account.php?upload=err'); exit(); } $stmt = mysqli_prepare($conn, "UPDATE users SET profilePicture = ? WHERE userID = ?"); if (!$stmt) { mysqli_close($conn); header('Location: account.php?upload=err'); exit(); } mysqli_stmt_bind_param($stmt, 'si', $publicPath, $userId); $ok = mysqli_stmt_execute($stmt); mysqli_stmt_close($stmt); mysqli_close($conn); if (!$ok) { header('Location: account.php?upload=err'); exit(); } header('Location: account.php?upload=ok'); exit();