/
├── .htaccess      # (Опционально) Файл конфигурации для Apache (перенаправления, безопасность и т.д.)
├── index.php      # Главный файл, точка входа в приложение
├── config.php     # Конфигурационный файл: данные для подключения к базе данных, ключи API и т.д.
├── public           # Публичная директория, доступная всем пользователям
│   ├── css          # Файлы CSS для стилизации сайта
│   │   └── style.css
│   ├── js           # Файлы JavaScript (если используются)
│   │   └── script.js
│   ├── images       # Папка с изображениями (логотипы, фотографии и т.д.)
│   │   └── logo.png
│   ├── fonts        # Шрифты сайта (если используются)
│   │   └── roboto.woff2
│   └── .htaccess    # (Опционально) Конфигурация для публичной директории (блокировка доступа к определенным файлам)
├── admin            # Директория для административных функций (доступ только авторизованным пользователям)
│   ├── index.php   # Главная страница админ-панели
│   ├── login.php   # Страница авторизации
│   ├── logout.php  # Страница выхода из системы
│   ├── articles    # Управление статьями
│   │   ├── index.php # Список статей (админ)
│   │   ├── create.php # Создание новой статьи
│   │   ├── edit.php   # Редактирование статьи
│   │   ├── delete.php # Удаление статьи
│   │   └── view.php   # Просмотр статьи (админ)
│   └── users       # Управление пользователями (опционально)
│       ├── index.php # Список пользователей
│       └── create.php # Создание пользователя (если нужна регистрация)
├── includes        # Вспомогательные файлы и функции, которые не должны быть напрямую доступны извне
│   ├── db_connect.php # Скрипт для подключения к базе данных
│   ├── functions.php  # Пользовательские функции
│   ├── auth.php      # Функции аутентификации (логика авторизации)
│   └── templates     # Фрагменты HTML-кода (шаблоны)
│       ├── header.php
│       ├── footer.php
│       └── article.php
├── vendor          # Директория для зависимостей (если используете Composer)
└── README.md       # Описание проекта (опционально)

Рекомендации по директориям и файлам:

  • .htaccess: Крайне полезен для перенаправлений, управления правами доступа, включения mod_rewrite для красивых URL. Важно, чтобы на сервере был настроен Apache или подобный веб-сервер.
  • config.php: НИКОГДА не храните конфиденциальные данные (пароли, ключи API) прямо в коде. Используйте переменные окружения или зашифрованные конфигурационные файлы. Этот файл будет содержать параметры подключения к базе данных MariaDB (имя хоста, имя пользователя, пароль, имя базы данных).
  • public: Все файлы, которые должны быть доступны пользователям, должны находиться в этой директории. В .htaccess в этой директории можно настроить, какие файлы доступны, а какие нет.
  • admin: Эта директория содержит административную панель. Важно, чтобы доступ к этой директории был ограничен авторизованными пользователями. В .htaccess в корневой директории или в директории admin можно настроить защиту от неавторизованного доступа.
  • includes: Здесь хранятся файлы, которые используются в разных частях сайта, но не должны быть доступны напрямую извне (например, подключение к базе данных, функции для работы с пользователями, шаблоны).
  • vendor: Если используете Composer (рекомендуется), все зависимости будут установлены здесь.
  • README.md: Полезный файл, описывающий проект, его установку и использование.

Важные замечания:

  • Безопасность: Обрати особое внимание на безопасность. Не доверяй пользовательскому вводу, используй подготовленные выражения (prepared statements) для работы с базой данных, эскейпируй данные, чтобы избежать SQL-инъекций. Регулярно обновляй зависимости.
  • Структура базы данных: Заранее продумай структуру таблиц в базе данных MariaDB.
  • Разделение логики: Стремись к разделению логики (например, бизнес-логика должна быть отделена от представления).
  • Composer: Использование Composer упрощает управление зависимостями.

Типовой файл index.php

<?php

// Подключение к базе данных
require_once 'includes/db_connect.php';

// Проверка авторизации (если пользователь залогинен)
session_start();
if (isset($_SESSION['user_id'])) {
    $user_is_logged_in = true;
} else {
    $user_is_logged_in = false;
}

// Подключение шаблонов
include 'includes/templates/header.php';

?>

<!DOCTYPE html>
<html lang="ru">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Мой сайт</title>
    <link rel="stylesheet" href="public/css/style.css">
</head>
<body>

    <div class="container">
        <h1>Добро пожаловать на мой сайт!</h1>

        <?php if ($user_is_logged_in): ?>
            <p>Вы авторизованы как <?php echo $_SESSION['username']; ?>. <a href="admin/index.php">Перейти в админ-панель</a> | <a href="includes/auth.php?action=logout">Выйти</a></p>
        <?php else: ?>
            <p>Вы не авторизованы. <a href="admin/login.php">Войти</a></p>
        <?php endif; ?>

        <h2>Недавние статьи:</h2>
        <?php
        // Пример запроса к базе данных (замените на реальный запрос)
        $query = "SELECT title, content FROM articles ORDER BY date_created DESC LIMIT 5";
        $result = mysqli_query($connection, $query);

        if (mysqli_num_rows($result) > 0) {
            while ($row = mysqli_fetch_assoc($result)) {
                echo "<article>";
                echo "<h3>" . htmlspecialchars($row['title']) . "</h3>";
                echo "<p>" . htmlspecialchars(substr($row['content'], 0, 200)) . "...</p>"; // Вывод первых 200 символов
                echo "</article>";
            }
        } else {
            echo "<p>Статьи не найдены.</p>";
        }
        ?>
    </div>

<?php
include 'includes/templates/footer.php';
?>

</body>
</html>

Что делает этот код:

  1. Подключение к базе данных: Подключает файл db_connect.php, который содержит параметры подключения к базе данных MariaDB и выполняет соединение.
  2. Проверка авторизации: Проверяет, залогинен ли пользователь, используя сессии.
  3. Подключение шаблона заголовка: Включает файл header.php, который, вероятно, содержит HTML для <head> и общую структуру <header>.
  4. HTML-структура: Создает базовую HTML-структуру страницы.
  5. Вывод приветственного сообщения: Выводит сообщение в зависимости от того, авторизован пользователь или нет. Предоставляет ссылки на админ-панель и форму логина/выхода.
  6. Пример запроса к базе данных: Демонстрирует, как можно выполнять запросы к базе данных. Важно: Замените этот пример на реальный запрос, который будет извлекать данные о статьях из вашей базы данных. Также обязательно используйте подготовленные выражения для безопасности.
  7. Вывод списка статей: Выводит список недавних статей (в примере выводится только заголовок и первые 200 символов контента).
  8. Подключение шаблона подвала: Включает файл footer.php, который, вероятно, содержит HTML для <footer>.

Что нужно сделать дальше:

  • db_connect.php: Создай этот файл и заполни его параметрами подключения к базе данных.
  • header.php и footer.php: Создай эти файлы и добавь в них необходимый HTML-код для заголовка и подвала сайта.
  • Замени пример запроса к базе данных: Реализуй реальный запрос для получения данных о статьях. Не забудь про подготовленные выражения!
  • Создай таблицу articles: Создай таблицу articles в базе данных MariaDB, если ее еще нет.
  • Стилизация: Добавь CSS-стили в public/css/style.css, чтобы сайт выглядел красиво.
  • Функциональность: Добавь функциональность для создания, редактирования и удаления статей.

Важно: Этот код предоставляет лишь базовый пример. Необходимо адаптировать его к конкретным требованиям вашего проекта. Не забудь про безопасность!

От alex

Обучаемый.