Un système de chat en temps réel permettant aux utilisateurs de s'inscrire, se connecter et échanger des messages instantanément.
| Page de connexion | Interface de chat |
|---|---|
| Formulaires d'inscription et de connexion avec design glassmorphism dark-mode | Zone de messages en temps réel avec polling AJAX ou WebSocket |
- Inscription & Connexion sécurisées (hash de mot de passe, sessions, CSRF)
- Chat global en temps réel
- Deux modes de communication :
- 🔄 AJAX Polling — récupération automatique toutes les 2 secondes
- ⚡ WebSocket — via Ratchet, communication instantanée
- Anti-spam — limite d'un message toutes les 2 secondes
- Design premium — dark-mode, glassmorphism, animations fluides
- Responsive — adapté mobile, tablette et desktop
chat-php/
├── index.php # Page principale (login / chat)
├── composer.json # Dépendances PHP (Ratchet)
├── run_websocket.bat # Script Windows pour lancer le serveur WS
├── .gitignore
│
├── assets/
│ ├── css/
│ │ └── custom.css # Design premium dark-mode
│ └── js/
│ ├── chat.js # Logique AJAX (polling, envoi, toasts)
│ └── chat_ws.js # Client WebSocket
│
├── db/
│ └── schema.sql # Schéma de la base de données
│
└── php/
├── config.php # Configuration DB, session, CSRF, helpers
├── register.php # Inscription (POST, validation, PDO)
├── login.php # Connexion (POST, vérification, session)
├── logout.php # Déconnexion (destruction de session)
├── send_message.php # Envoi de message (POST, anti-spam)
├── fetch_messages.php # Récupération des messages (GET, JSON)
└── chat_server.php # Serveur WebSocket Ratchet
1. Cloner le projet
git clone https://github.com/sheedrdh/chat-php.git
cd chat-php2. Installer les dépendances
composer install3. Créer la base de données
Démarrez Apache et MySQL dans XAMPP, puis importez le schéma :
mysql -u root < db/schema.sqlOu ouvrez phpMyAdmin (http://localhost/phpmyadmin) et importez le fichier db/schema.sql.
4. Configurer la connexion DB (si besoin)
Modifiez php/config.php si votre configuration MySQL diffère :
define('DB_HOST', '127.0.0.1');
define('DB_NAME', 'realtime_chat');
define('DB_USER', 'root');
define('DB_PASS', '');5. Lancer l'application
Accédez à : http://localhost/chat-php/
6. (Optionnel) Lancer le serveur WebSocket
# Windows
run_websocket.bat
# Linux / Mac
php php/chat_server.phpLe serveur WebSocket écoute sur le port 8080.
| Mesure | Détail |
|---|---|
| Mots de passe | Hashés avec password_hash() (bcrypt) |
| Injection SQL | PDO + requêtes préparées |
| XSS | htmlspecialchars() sur tous les affichages |
| CSRF | Token unique par session, vérifié à chaque POST |
| Sessions | httponly, samesite=Lax, strict_mode |
| Anti-spam | 1 message / 2 secondes maximum |
| Limite | Messages limités à 500 caractères |
| Colonne | Type | Description |
|---|---|---|
id |
INT UNSIGNED, PK | Identifiant unique |
username |
VARCHAR(50), UNIQUE | Pseudo |
email |
VARCHAR(255), UNIQUE | Adresse e-mail |
password |
VARCHAR(255) | Hash du mot de passe |
created_at |
TIMESTAMP | Date de création |
| Colonne | Type | Description |
|---|---|---|
id |
BIGINT UNSIGNED, PK | Identifiant unique |
user_id |
INT UNSIGNED, FK | Auteur du message |
room_id |
INT UNSIGNED, FK | Salon (NULL = global) |
content |
TEXT | Contenu du message |
created_at |
TIMESTAMP | Date d'envoi |
| Colonne | Type | Description |
|---|---|---|
id |
INT UNSIGNED, PK | Identifiant unique |
name |
VARCHAR(100), UNIQUE | Nom du salon |
created_by |
INT UNSIGNED, FK | Créateur |
created_at |
TIMESTAMP | Date de création |
- Backend : PHP 8+ (pur)
- Base de données : MySQL / MariaDB
- Frontend : HTML5, CSS3, JavaScript ES6
- UI : Bootstrap 5.3, Font Awesome 6
- WebSocket : Ratchet (cboden/ratchet)
- Design : Glassmorphism, dark-mode, animations CSS
Ce projet est sous licence MIT. Vous êtes libre de l'utiliser, le modifier et le distribuer.
Développé avec ❤️ en PHP/MySQL