JeuWeb - Crée ton jeu par navigateur
Article Architecture d'un jeu web - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : Article Architecture d'un jeu web (/showthread.php?tid=8215)



Architecture d'un jeu web - Xenos - 14-09-2020

Architecture d'un jeu web

Introduction

Dans ce tutoriel, je vais vous apprendre à bien organiser vos dossiers pour une performance respectable pour un jeu php. Il est évident que ce n'est pas la seule existante, et sûrement pas la meilleure (cela varie selon les goûts), mais elle me convient parfaitement, à moi. Ainsi, les objectifs de ce tutoriel sont très simples :
  • Mettre en place et créer son environnement


Séparer partie publique et partie privée

Partie publique

Avant toute chose, il vous faut définir ce qui est accessible aux utilisateurs. Ce sont tous les fichiers que n'importe qui peut afficher sans compromettre la sécurité de votre jeu. Aussi, nous avons :
  • les pages : ce sont toutes les pages de votre jeu

  • les images : je pense que vous avez deviné Big Grin

  • les fichiers uploadés : ce sont tous les fichiers qu'ont uploadé les utilisateurs de votre jeu

  • les fichiers JavaScript (JS) : les fichiers qui contiennent le javascript de vos pages

  • les fichiers CascadingStyleSheets (CSS) : les fichiers qui contiennent le css de vos pages


On voit donc 5 dossier qui se démarquent plutôt bien, et facilement. Créez donc à la racine de votre site un dossier "public", ou "web" (j'utiliserais web pour la suite du tuto), et créez-y 5 dossiers : "pages", "images", "upload", "scripts", "css". Il est possible de regrouper les dossier images et css dans un même dossier design.

Toutefois, les pages peuvent être gérées de plusieurs manières différentes. En effet, si vous utilisez un fichier PHP qui inclut la page demandée via une variable GET, il vaut mieux créer le dossier pages dans la partie privée. Si vous utilisez plusieurs pages qui incluent des fichiers "debut" et "fin" (ce ne sont que des noms d'exemple), il vaut mieux ne pas créer de dossier du tout.
Pour résumer :

<?php
// Si votre code ressemble à ça :
 
/* ... */
if (file_exists($_GET["page"] .'.php'))
require $_GET["page"] .'.php';
else
exit("page non trouvée");
/*...*/
 
// Alors omettez le dossier pages qui suivra. Sinon, si vous avez un code du genre :
require 'debut.php';
 
/* ... */
 
require 'fin.php';
 
// Alors créez vos fichiers qui se présentent sous cette forme à la racine du dossier web.

Partie privée

Dans cette partie, vous retrouverez tous les fichiers de configuration, les fichiers de fonctions, de traitement, vos classes, vos librairies, et j'en passe. Celle-ci ne se trouvera pas dans un sous-dossier, car en effet, il est complètement inutile de procéder ainsi. Vous verrez la méthode dans la prochaine partie. En attendant, concentrons-nous sur les dossiers de l'architecture privée.

Ces dossiers peuvent varier selon l'importance du projet, et des outils que vous utilisez. J'utiliserais ce qui me semble primordial, mais libre à vous de modifier par la suite.
A la racine de votre site, donc, pour l'instant, vous ne devez avoir qu'un seul dossier "web" (ou "public"). Rajoutez à ses côtés les dossiers suivants :
  • cache - Servira à regrouper tous les fichiers mis en cache

  • pages - Contiendra toutes vos pages (Si vous utilisez la première méthode de la partie publique)

  • lib - Dans lequel vous mettrez vos classes, vos librairies, vos fonctions,…

  • config - Servira à contenir tous les fichiers de configuration pour votre site

  • log - Contiendra les fichiers de log (optionnel)

  • xml - Pour tous vos fichiers xml (optionnel)


Il faut aussi un dossier pour les fichiers de vos univers. Alors là, c'est à vous de vous dépatouiller, cela dépend d'un tas de choses concernant votre projet.

Et voilà, l'architecture de votre site est prête ! Pourtant, vous n'en avez pas encore fini. En effet, il y a encore une petite chose à régler, car pour le moment, la partie privée de votre site est accessible à n'importe qui !

Empêcher l'accès à la partie privée

Il y a plusieurs méthodes pour cela. Je vais vous montrer l'une d'entre elles.
(Pour la petite histoire, je voulais au départ vous en montrer deux, mais je me suis dit que c'était inutile, vu que l'urlrewriting marchait très bien Smile ).

L'URL Rewriting est un module apache normalement activé sur la plupart des hébergeurs, et très simple à utiliser. Voilà pourquoi je vous en parle.
Je ne suis cependant par là pour vous faire un cours dessus, donc je ne vous présenterais que ce qui est utile à ce que je veux vous montrer. Si vous voulez en savoir plus, google est votre ami Wink

Créez un fichier .htaccess à la racine de votre site web, et introduisez le code suivant :

RewriteEngine On # Module Rewrite ON
 
# Rajoutez ici vos propres redirections
 
# Ajouter ensuite :
 
RewriteRule ^(.+)\.(html|htm|php)$ ./web/$1.php [L]
# OU (en fonction de la méthode utilisée pour la partie publique)
RewriteRule ^(.+)\.(html|htm|php)$ ./web/index.php?page=$1 [L]
 
# Introduisez maintenant ce code
RewriteRule ^$ ./web/index.php [L] # La racine de votre site web pointera sur le dossier web de votre projet
RewriteRule ^index\.(html|htm|php)$ ./web/index.php [L] # Les pages d'index pouvant être appelées également.

Et voilà !
Tout est fin prêt, vous pouvez utiliser l'architecture !

Créé par Tho sur le Forum.