🔐 ЗАЩИТА:
- session_start() + проверка $_SESSION['user'] — только для админа
- htmlspecialchars() — защита от XSS при выводе имен файлов
- array_diff() — исключение служебных папок (. и ..)
⚙️ ФУНКЦИИ:
- Сканирование папки /uploads/
- Вывод списка всех файлов
- При клике — передача имени файла в родительское окно
- Автоматическое закрытие окна после выбора
📂 ВОЗМОЖНОСТИ:
- Интеграция с формой добавления статьи
- Вызов через window.open()
- Функция insertFilePath() в родителе
⚠️ ОГРАНИЧЕНИЯ:
- Показывает все файлы в папке (без фильтра по типу)
- Рекомендуется добавить фильтр расширений
📦 ПОДКЛЮЧАЕТСЯ К:
- add.php
- edit.php
- add_code_post.php
- edit_code_post.php
<?php
session_start();
if (!isset($_SESSION['user'])) {
die("Доступ запрещен");
}
$uploadDir = '../uploads/';
$files = [];
if (file_exists($uploadDir)) {
$files = array_diff(scandir($uploadDir), array('.', '..'));
}
// Дополнительная фильтрация: показываем только изображения
$allowed_extensions = ['jpg', 'jpeg', 'png', 'gif', 'webp', 'svg'];
$filtered_files = [];
foreach ($files as $file) {
$ext = strtolower(pathinfo($file, PATHINFO_EXTENSION));
if (in_array($ext, $allowed_extensions)) {
$filtered_files[] = $file;
}
}
$files = $filtered_files;
?>
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<title>Выбор файла</title>
<style>
body { font-family: sans-serif; padding: 20px; }
.file-list { margin-top: 20px; }
.file-item { padding: 8px; border-bottom: 1px solid #eee; }
.file-item:hover { background-color: #f5f5f5; cursor: pointer; }
</style>
</head>
<body>
<h2>Выберите файл</h2>
<div class="file-list">
<?php if (empty($files)): ?>
<p>Нет загруженных файлов</p>
<?php else: ?>
<?php foreach ($files as $file): ?>
<div class="file-item" onclick="selectFile('<?= htmlspecialchars($file, ENT_QUOTES, 'UTF-8') ?>')">
<?= htmlspecialchars($file, ENT_QUOTES, 'UTF-8') ?>
</div>
<?php endforeach; ?>
<?php endif; ?>
</div>
<script>
function selectFile(filename) {
if (window.opener && !window.opener.closed) {
// Дополнительная проверка: экранируем имя файла перед передачей
window.opener.insertFilePath(filename);
window.close();
}
}
</script>
</body>
</html>
Комментарии
Пока нет комментариев. Будьте первым!