Aller au contenu

TCH099 : Un routeur PHP pour les pages et l’API

TCH099 est un projet pédagogique qui combine pages frontend statiques et API PHP. Les routes exposent la frontière: certains chemins retournent du HTML, tandis que d’autres appellent des scripts serveur.

Application et services API Docker
  • Mis à jour
  • 1
  • HTML · 30.29%
  • MIT
Docker ComposeMariaDBAzureREST API
Langages du dépôtHTML 30.29%8

Parts calculées à partir des octets GitHub Linguist.

Langage%Octets
HTML30.29%21 098
PHP24.43%17 017
Java24.06%16 757
Jupyter Notebook9.1%6 341
Shell7.27%5 061
Python3.99%2 782
2 autres langages
Dockerfile0.7%490
CSS0.15%102

GitHub · README · Statistiques de langages

Aperçu

Pourquoi il existe

Environnement multi-conteneurs isolé avec réseau bridge, persistance MariaDB et interface web.

Cas d’usage

Référence d'architecture conteneurisée pour application et base de données.

Démarrage

Ces commandes viennent de la documentation du dépôt. Elles n’ont pas été exécutées pendant cette revue.

README.md · Initialisation de la base de données
cd db
python3 -m pip install mysql-connector-python python-dotenv
python3 db.py
scripts/README.md · Ubuntu/Debian
sudo usermod -aG docker $USER
newgrp docker  # or log out and back in
scripts/README.md · Automated Installation
curl -fsSL https://raw.githubusercontent.com/yourusername/docker-install/main/install-docker.sh -o install-docker.sh
chmod +x install-docker.sh
sudo ./install-docker.sh
README.md · Utilisation de Docker
docker-compose up -d --build
scripts/README.md · Installing Docker Compose
sudo curl -L "https://github.com/docker/compose/releases/download/v2.20.3/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose && \
sudo chmod +x /usr/local/bin/docker-compose
scripts/README.md · Verifying Installation
docker --version
docker run hello-world
docker-compose --version

Références du dépôt

Extraits des guides du dépôt, dans leur langue d’origine. Les liens ouvrent la version du code consultée.

Prérequis et premier essai

Docker Installation Guide

scripts/README.md

This guide provides instructions for installing Docker, Docker Desktop, and Docker Compose on various operating systems.
Lire les instructions complètes ↗

Prerequisites

scripts/README.md

Before installing Docker, ensure your system meets the following requirements:
Lire les instructions complètes ↗

Installing Docker Compose

scripts/README.md

Docker Compose is included with Docker Desktop. For Linux without Docker Desktop:
Lire les instructions complètes ↗

Installing Docker Desktop

scripts/README.md

  1. Create and verify your Docker account first at Docker Hub
  2. Download Docker Desktop for your platform:
  • Windows
  • macOS
  • Linux
  1. Install and launch the application
  2. Sign in with your Docker account when prompted
Lire les instructions complètes ↗

Automated Installation

scripts/README.md

Use our automated installation script for Ubuntu/Debian systems: The script will:

  • Install Docker Engine and Docker Compose
  • Optionally install Docker Desktop
  • Add your user to the docker group
  • Remind you about creating and verifying your Docker account Remember: Docker requires a Docker account for using Docker Desktop and Docker Hub features. Make sure to create an account at Docker Hub and verify your email before using Docker Desktop.
Lire les instructions complètes ↗
Configuration et utilisation

Configuration de l'environnement

README.md

Variables d’environnement nécessaires:
Lire les instructions complètes ↗

Utilisation de Docker

README.md

Pour exécuter l’application localement via Docker: Une fois démarré, vous pourrez accéder aux points d’entrée suivants:

  • Base de données: mysql:host=localhost;port=3306;dbname=mydatabase
  • Administrateur: admin / rootpassword
  • Utilisateur: user / password
Lire les instructions complètes ↗

Table Clients

db/README.md

idusernameemailpasswordrolecreated_atupdated_at
1alice[email protected]pass123client2023-01-01 00:00:002023-01-01 00:00:00
2bob[email protected]pass456client2023-02-01 00:00:002023-02-01 00:00:00
3carol[email protected]pass789admin2023-03-01 00:00:002023-03-01 00:00:00
Lire les instructions complètes ↗

Utilisation de Variables d'Environnement

api/README.md

Les variables d’environnement sont utiles pour stocker des informations sensibles comme les identifiants de base de données.
Lire les instructions complètes ↗

Exemple d'Utilisation

api/README.md

Cela permet de séparer les configurations sensibles du code source.
Lire les instructions complètes ↗
API et intégration

Comment ajouter un nouveau point d'API

README.md

Pour ajouter un nouveau point d’API:

  1. Créer le fichier PHP Créez votre fichier PHP dans le dossier api/:
  2. Ajouter la route Ajoutez une nouvelle route dans routes.php:
  3. Tester votre API Vous pouvez tester votre API avec curl ou un navigateur:
Lire les instructions complètes ↗
Exploitation et dépannage

4. **UPDATE**

db/README.md

Met à jour des données existantes dans une table.
Lire les instructions complètes ↗

Troubleshooting

scripts/README.md

  1. Permission denied error:
  2. Docker daemon not running:
  3. WSL 2 issues on Windows:
  • Enable WSL 2 in Windows features
  • Update WSL 2 kernel with: wsl –update
Lire les instructions complètes ↗

Workflow 1: Deploy PHP App to Azure Web App

.github/workflows/README.md

This workflow builds and deploys a PHP application to an Azure Web App.
Lire les instructions complètes ↗

Workflow 2: Deploy Static Content to GitHub Pages

.github/workflows/README.md

This workflow deploys static content to GitHub Pages.
Lire les instructions complètes ↗
Documentation source

6 documents lus parmi 6 candidats.

Fonctions et composants 2

Routes des pages
routes.php charge router.php, associe accueil et connexion aux fichiers frontend et définit les pages 403 et 404. Le callback /admin vérifie explicitement isAdmin avant de choisir la réponse.
Scripts API
Connexion, inscription, déconnexion et user_details ont leurs scripts API. Des routes de démonstration incluent une langue et une image aléatoire. Les scripts traitent les requêtes; le routeur choisit leur destination.

Architecture

Les composants et leurs liens restent lisibles en texte. Le diagramme ajoute une vue interactive.

Contexte système Contexte
  1. Navigateur ou client mobile
  2. Routeur PHP
  3. Page HTML
  4. Script API
  5. Données applicatives

Liens vérifiés dans le dépôt.

Mermaid Diagramme interactif (chargement à l’ouverture)

Vue générale des composants et des échanges vérifiés dans le dépôt.

Vue statique de l’architecture de TCH099
Aperçu statique. Le diagramme interactif le remplace après le chargement de Mermaid.
flowchart LR
  n0["Navigateur ou client mobile"]
  n1["Routeur PHP"]
  n2["Page HTML"]
  n3["Script API"]
  n4["Données applicatives"]
  n0 --> n1
  n1 --> n2
  n1 --> n3
  n3 --> n4
Version texte du diagramme
  • Navigateur ou client mobile → Routeur PHP
  • Routeur PHP → Page HTML
  • Routeur PHP → Script API
  • Script API → Données applicatives
Suivre un parcours dans le code

Comparez GET /login et POST /api/login. Le premier choisit une page; le second lance l’authentification. Les contrôles doivent protéger les opérations API autant que la page administrative.

API HTTP et permissions

routes.php associe les chemins ci-dessous. Le README montre des chemins comme /api/login.php et des messages en français. Les gestionnaires utilisent les chemins de ce tableau et des messages en anglais. La colonne d’accès indique un contrôle trouvé dans le gestionnaire.

Contrôles d’accès lus dans les gestionnaires. Une mention « admin » dans le README ne figure ici que si le code la vérifie.
MéthodeCheminContrôle vérifiéFichier
POST/api/loginAucun contrôle de session. loginUser vérifie l’empreinte du mot de passe.api/login.php
POST/api/signupAucun contrôle de session. Le rôle du corps doit être admin ou client, y compris admin pour un nouveau compte.api/signup.php
POST/api/logoutAucun contrôle de session. Le gestionnaire détruit la session.api/logout.php
GET/api/user_detailsExige la clé de session user_loggedin. Le rôle n’est pas vérifié.api/user_details.php
GET/api/clientsExige user_loggedin et le rôle de session admin. Sinon le JSON dit Access denied.api/clients.php
GET/adminPage, pas du JSON. isAdmin() inclut admin.html, sinon 403.html.routes.php
GET, POST/api/hello-world/$langueAucun contrôle de session. Une session connectée remplace prenom par le nom d’utilisateur.api/hello-world.php
GET, POST/api/random-imageAucun contrôle de session dans le gestionnaire.api/random-image.php

Séquence limitée au chemin cité.

sequenceDiagram
  participant Browser
  participant Login as api/login.php
  participant Users as Clients table
  Browser->>Login: POST /api/login JSON
  Login->>Users: SELECT by username
  Users-->>Login: row
  Login-->>Browser: status, message, redirect
Exemple de requête
POST /api/login
Content-Type: application/json

{
  "username": "example",
  "password": "local-dev-password"
}

Réponse et erreurs

  • Succès : api/login.php retourne status: success, message: Login successful et redirect: /home.
  • Identifiants invalides : le corps JSON contient status: error et Invalid username or password.
  • Autres méthodes HTTP : le corps JSON contient Invalid request method.
  • Langue des messages : le gestionnaire utilise l’anglais, tandis que les exemples du README sont en français.
  • Détails de session : GET /api/user_details exige user_loggedin et retourne user_details depuis la session.
  • Liste des clients : GET /api/clients exige aussi le rôle admin. Sa requête SELECT * FROM Clients inclut la colonne du mot de passe dans une réponse réussie.
  • Démonstrations publiques : les requêtes GET et POST vers /api/hello-world/$langue et /api/random-image n’ont pas de contrôle de session. Hello World utilise le nom de session pour prenom lorsqu’il existe.
  • Image aléatoire : imageType: human retourne l’URL thispersondoesnotexist.com. Toute autre valeur appelle The Cat API.
Authentification, limites et pagination

POST /api/signup accepte le rôle admin ou client dans le JSON. signup.php n’exige pas une session administrateur avant d’enregistrer ce rôle. router.php envoie Access-Control-Allow-Origin: *. Ces gestionnaires ne fixent pas de limite de débit. GET /admin est une page: routes.php appelle isAdmin() et inclut sinon 403.html. La connexion ne définit pas de statut HTTP d’erreur; l’échec reste dans le JSON.

Déploiement et exploitation

Les ports, le stockage et les relations de démarrage ci-dessous viennent de la configuration du dépôt. depends_on indique l’ordre de démarrage, pas la disponibilité du service.

Réseau. Bridge network tch099-network. The Compose file does not set host networking.

Carte du déploiement

Topologie Compose des services, ports et dépendances de démarrage documentés.

Vue statique de l’architecture de TCH099
Aperçu statique. Le diagramme interactif le remplace après le chargement de Mermaid.
flowchart LR
  classDef svc fill:#1b3040,stroke:#6fdbd0,color:#edf4fb
  web["web<br/>8001:80"]:::svc
  db["db<br/>3306:3306"]:::svc
  phpmyadmin["phpmyadmin<br/>8060:80"]:::svc
  db --> web
  db --> phpmyadmin
Version texte du diagramme
  • web — Build from Dockerfile · 8001:80 → db, startup order only
  • db — mariadb:latest · 3306:3306
  • phpmyadmin — phpmyadmin/phpmyadmin · 8060:80 → db, startup order only
ServiceImage ou buildPorts publiésDémarrageStockage
webBuild from Dockerfile8001:80db, startup order onlyBind mount of the repository at /var/www/html
dbmariadb:latest3306:3306Named volume dbdata
phpmyadminphpmyadmin/phpmyadmin8060:80db, startup order only

Noms de variables documentés. Les valeurs ne sont pas recopiées.

  • DB_HOST
  • DB_PORT
  • MYSQL_ROOT_PASSWORD
  • MYSQL_DATABASE
  • MYSQL_USER
  • MYSQL_PASSWORD
  • PMA_HOST

Types et structure des fichiers

5 types déclarés, dont 5 dans l’aperçu des relations de base.

Diagramme des types
classDiagram
direction TB
class t4c474a248da2["HttpClient"] {
  getInstance()
  execute()
  runOnUiThread()
  showToast()
}
class t8be3c8236c60["LoginActivity"] {
  onCreate()
  loginUser()
  sendNotification()
  createNotificationChannel()
}
class t30126744bba2["MainActivity"] {
  onCreate()
}
class t2369eda48b07["SignupActivity"] {
  onCreate()
  signupUser()
}
class ta93831bff0ab["UserDetailsActivity"] {
  onCreate()
  fetchUserDetails()
}
class b77dd461be19c["AppCompatActivity"] {
  <<unresolved_base>>
}
t8be3c8236c60 ..> b77dd461be19c : declared base
class bad280d6f8481["AppCompatActivity"] {
  <<unresolved_base>>
}
t30126744bba2 ..> bad280d6f8481 : declared base
class be4547a562aeb["AppCompatActivity"] {
  <<unresolved_base>>
}
t2369eda48b07 ..> be4547a562aeb : declared base
class bf6fdb00a13f1["AppCompatActivity"] {
  <<unresolved_base>>
}
ta93831bff0ab ..> bf6fdb00a13f1 : declared base

Les bases non résolues restent identifiées; les signatures complètes ne sont pas reconstruites.

Index des types

Référence

28 / 28 fichiers admissibles lus (109 dans l’arbre); 0 trop volumineux, 0 échec de lecture et 0 diagnostic de syntaxe.

Ce que couvre l’analyse

Les dossiers connus de dépendances et de compilation, les fichiers d’identifiants et les binaires sont exclus. La collecte couvre les README, les manifestes reconnus et les fichiers source pris en charge.

Les statistiques Linguist couvrent l’ensemble du dépôt et peuvent inclure d’autres langages.

Carte des fichiers
flowchart TD
  root["TCH099"]
  f0["README.md"]
  root --> f0
  f1["router.php"]
  root --> f1
  f2["routes.php"]
  root --> f2
  f3["config.php"]
  root --> f3
  f4["docker-compose.yml"]
  root --> f4
  f5["api/README.md"]
  root --> f5
  f6["api/clients.php"]
  root --> f6
  f7["api/hello-world.php"]
  root --> f7
  f8["api/login.php"]
  root --> f8
  f9["api/logout.php"]
  root --> f9
  f10["api/random-image.php"]
  root --> f10
  f11["api/signup.php"]
  root --> f11
  f12["api/user_details.php"]
  root --> f12
  f13["db/README.md"]
  root --> f13
  f14["db/db.py"]
  root --> f14
  f15["frontend/README.md"]
  root --> f15

Fichiers à lire 3

Références