Pourquoi ne faut-il pas réinventer la roue ?
Devrait-on systématiquement se tourner vers un CMS, un framework ou des composants réutilisables ?

Le , par Shinja, Membre habitué
Salut, je viens poser un débat autour de la réalisation d'un site web fait-maison en PHP et ceux développé avec CMS. A chaque fois que je parle de créer un site de A à Z, on me dit que ce n'est pas la peine de réinventer la roue et qu'il existe beaucoup de CMS qui permettent de bosser plus rapidement. Alors oui c'est vrai, quand j'utilise un CMS j'obtiens un résultat sans trop forcer, mais quand on cherche quelque chose de spécifique il faut bidouiller et parfois se torturer l'esprit alors que cela serait nettement plus simple d'avoir créer son site à la main.

Un exemple tout bête, pour modifier l'apparence de la page de login de WordPress j'ai dû recourir à du jQuery pour modifier le style css de chaque élément pour apporter mon propre style. Oui, il existe une fonction pour cela mais on ne peut pas tout modifier. Pour des raisons personnelles, j'ai décidé de créer deux sites à la main. Au début j'ai pas mal ramé, car j'ai dû écrire pas mal de fonctions pour me simplifier la vie, mais une fois crées, franchement je trouve que ça marche au poil et ça me facilite plus la vie qu'un CMS.

Alors, je ne sais pas quoi penser vis à vis des CMS surtout quand on cherche à avoir le contrôle sur chaque élément. De plus, il est possible d'optimiser son code pour alléger au maximum le chargement d'une page.

Et vous qu'en pensez-vous ?


Vous avez aimé cette actualité ? Alors partagez-la avec vos amis en cliquant sur les boutons ci-dessous :


 Poster une réponse

Avatar de Tsilefy Tsilefy - Membre chevronné https://www.developpez.com
le 13/02/2014 à 22:38
Il n'y a pas débat. Le tout c'est de trouver la réponse la plus appropriée à ta problématique. Est-ce que tes besoins peuvent être résolus plus facilement, plus rapidement et avec une meilleure sécurité par un CMS, un framework, des composants ou un code from scratch? Si c'est le cas, il n'y a pas à réflechir, il faut adopter la solution qui convient. Sinon, il faut écrire soi-même ce dont on a besoin.

Le problème tient plus à la difficulté à définir la problématique (parce que le client ne sait pas ce qu'il veut au départ ou change d'avis par exemple) et à la méconnaissance des solutions disponibles. Après, personnellement, si je me mets à la place du client, je ne vais pas payer des heures un développeur pour qu'il me réécrive une fonctionnalité que je peux avoir en 30 secondes avec Packagist/Composer (ou jQuery, etc..), c'est de l'arnaque.
Avatar de Shinja Shinja - Membre habitué https://www.developpez.com
le 14/02/2014 à 9:09
Oui, mais dans le cadre d'un projet personnel ? Actuellement je développe des sites sans framework, juste du PHP. Je trouve que le PHP est déjà très simple pour faire un site basique et je ne comprend pas pourquoi il faut absolument utiliser un CMS ou un framework. Enfin le framework peut-être utile pour les choses complexe comme communiquer avec le compte d'un utilisateur Youtube etc. mais pour quelqu'un qui souhaite créer un site communautaire simple, est-il réellement préférable de passer par un CMS ?

J'aimerais avoir votre avis sur la conception de compte utilisateur en PHP/MYSQL. J'utilise simplement un formulaire d'inscription qui va enregistrer le tout dans la base de données. J'applique naturellement un MD5 sur le mot de passe, je génère une clé secrète aléatoire en MD5 et j'envois un email de confirmation sur l'e-mail indiqué. L'utilisateur confirme le mail, et le site vérifie si l'utilisateur existe bien et si la clé est conforme. Si le compte n'est pas activé alors il l'active.

Je trouve cela vraiment très simple à écrire, alors pourquoi utiliser un framework ? Est-ce vraiment plus rapide qu'écrire deux ou trois fonctions ?
Avatar de Spartacusply Spartacusply - Membre expert https://www.developpez.com
le 14/02/2014 à 10:10
Salut,

déjà pour ma part bien distinguer CMS et framework me paraît être extrêmement important. Ils ne sont absolument pas comparables. Un CMS est conçu dans un objectif précis (comme son nom l'indique, c'est toujours plus ou moins la gestion de contenu) donc en effet si ton projet ne va pas dans ce sens là, il ne m'apparaît pas nécessaire d'en utiliser un, et en devient en effet plus chiant qu'autre chose car tu vas vouloir l'utiliser pour quelque chose qu'il n'est pas censé faire.
A contrario, un framework te fournit des outils de base (en plus ou moins grande quantité), mais avec quoi tu peux normalement faire et développer n'importe quoi et, c'est extrêmement important, tu n'es pas obligé d'utiliser les outils qu'il te propose ! En partant de ce principe là, je ne vois aucune raison de me passer au moins d'un petit framework (CakePhP, CodeIgniter pour php), même en version minimaliste, ne serait-ce que pour avoir des fonctionnalités archi-standard que l'on retrouve sur 99,99% des sites webs (connexion, mise en place d'un back-end, utilisation d'un layout, connexion à une base de données sql, découper proprement du code...).
Rien que cela me paraît être une raison suffisante pour justifier l'utilisation d'un framework.

Mais ne pas oublier dans tous les cas que bien cibler ce que l'on souhaite faire est essentiel !
Avatar de crozet.magenta crozet.magenta - Membre averti https://www.developpez.com
le 14/02/2014 à 11:54
pour rajouter mon avis :
Pour ma part, j'utilise les trois à savoir du code brut en php, un framework (laravel 4) et pour certains besoins très précis un CMS. per exemple, j'ai lancé il y a peu une boutique en ligne dans ce cas précis, réinventer la roue est bien trop lourd et long pour en plus arriver à un résultat qui sera largement en dessous de ce qui existe déjà. j'ai donc pris un CMS
Tout dépend de l'utilisation que tu veux faire de ton code. il faut savoir qu'un code brut sera surement plus difficilement réutilisable (surtout s'il n'est pas bien structué) que du code fait à partir d'un framework.
Après il faut voir dont tu as besoin aussi ce n'est peut-être pas utile de prendre un framework si tu utilises uniquement la partie base de données, ça alourdira ton site pour pas grand chose. cela dit, du côté utilisateur, la différence ne sera presque pas visible en terme de vitesse.
pour donner un ordre de comparaison, j'ai un site fait en php brut (c'est très basique, il n'y pas de requête de BDD), le temps de réponse est de l'ordre de 0.05 sec en comparaison, une page générée par laravel sans requête de BDD met en moyenne 0.15 sec pour arriver au navigateur. la différence est effectivement assez grande mais c'est imperceptible. (pour info, le temps de réponse d'une page en HTML simple est de l'ordre de 5 ms)
enfin, le dernier point à prendre en compte est le "confort de développement" en php, tu dois tout faire alors que avec un framework, tout est extrêmement plus rapide à coder mais d'un autre côté, il faut en premier apprendre à utiliser le framework.

Comme ça a été dit, c'est à toi de voir en fonction de tes besoins, il n'y a pas de réponse absolue
Avatar de Shinja Shinja - Membre habitué https://www.developpez.com
le 14/02/2014 à 12:12
Merci pour vos avis, ça m'aide à un peu voir les choses autrement. Disons que j'ai pas mal bosser sur du WordPress et du coup quand je développe un site en PHP pur, je me base sur le même fonctionnement en créant mes propres fonctions.

Par exemple, j'ai crée une fonction qui se charge d'ajouter une nouvelle entrée dans une table :

Code : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
 
<?php 
function db_insert($table, $args, $debug = false) { 
	$db = db_connect();	 
	if($db){ 
		foreach($args as $key => $value) { 
			$keys[] = $key; 
			$value = mysqli_real_escape_string($db, $value); 
			$values[] = "'".$value."'"; 
		} 
		$new_keys = implode(', ', $keys); 
		$new_values = implode(', ', $values); 
		$query_str = "INSERT INTO $table ( $new_keys ) VALUES ( $new_values )"; 
		$query = mysqli_query($db,$query_str); 
		$id = mysqli_insert_id($db); 
		if($debug) { 
			var_dump($query);	 
			echo ' :::: '.$query_str; 
		} 
		if($query) return $id; 
		else return false; 
		db_close(); 
	} else return false; 
} 
?>
De cette manière, bah c'est ultra simple d'ajouter un nouvel élément vu que j'utilise simplement la fonction comme tel :

Code : Sélectionner tout
<?php $new_post = insert_db('users', $args); ?>
Il faudrait que je travaille avec un framework pour me rendre compte de son utilité. Disons que j'ai écris une grosse partie de mes fonctions, et il faudrait certainement tout recommencer pour l'exploiter.
Avatar de Tsilefy Tsilefy - Membre chevronné https://www.developpez.com
le 14/02/2014 à 23:11
Au vu de ton code et du cas que tu cites, tu n'utilises pas de requêtes préparées et tu te sers de md5 pour hasher un mot de passe: ce n'est pas bon. Est que ton espace-membre est protégé contre les injections XSS, le CRSF etc ? Est-ce que tes données sont correcteent validées et filtrées avant l'entrée en base de données?

Un (bon) CMS le fait automatiquement sans que tu t'en soucies. Un (bon) framework ne t'imposera rien, mais t'encouragera à utiliser les bonnes pratiques.

Effectivement, si c'est juste pour apprendre, il n'y a rien de mal à réinventer la roue. Mais dans ce cas il faut suivre les bonnes méthodes de "fabrication" et se méfier de beaucoup de cours en ligne et autres qui parlent surtout d'un PHP d'il y a 5 ans (avant PHP 5.3 notamment). Mais une fois que tu progresseras, tu découvrira 1) qu'il est plus intéressant d'écrire un code avec une valeur ajoutée plutôt que de réécrire des choses qui ont déjà été faites des milliers de fois et 2) qu'il y a des développeurs très forts qui ont consacré un temps fou à développer des CMS ou des frameworks, et que à toi tout seul il y a très peu de chances de faire mieux qu'eux dans le domaine qu'ils ont choisi, et qu'il est mieux de trouver ton propre domaine. Juste un exemple, regarde la plupart des bonnes bibliothèques PHP sur github, la plupart d'entre eux utilisent des composants externes et se concentrent sur leur principal objectif au lieu de réinventer la roue.
Avatar de Spartacusply Spartacusply - Membre expert https://www.developpez.com
le 15/02/2014 à 1:21
+1 pour Tsilefy. Développer soi-même introduit toujours une notion de sécurité relative du fait à qu'il nous soit impossible de penser à tout dès le premier coup, alors qu'on peut partir du principe que les CMS et frameworks sont relativement sûr à utiliser étant donné qu'ils ont été développer par l'ensemble d'une communauté et ont déjà pas mal de bouteille derrière eux.

Mais dans tous les cas ta démarche est intéressante et pertinente, tu as un raisonnement qui va dans le bon sens. Il faut d'abord commencer à développer à partir de rien pour apprendre, puis en apprendre davantage à partir des bases que l'ont s'est bâti (et non tenter de tout apprendre d'un coup avec le grand risque de ne pas y arriver et de s'effronder).

Maintenant que tu as un peu avancé, tu peux essayer et tester un framework, et tu verras après que tu en saisiras les fondamentaux, tu ne pourras plus t'en passer
Avatar de Shinja Shinja - Membre habitué https://www.developpez.com
le 15/02/2014 à 16:00
En effet, j'utilise uniquement le MD5 pour protéger le mot de passe, je pensais que se serait amplement suffisant étant donné que lors de la vérification, j'utilise un mot en plus avec le mot de passe. Je vais tout de même regarder un bon framework PHP et voir ce qu'il peut m'apporter. Déjà rien que pour le coté sécurité, je pense que c'est déjà une bonne chose d'en adopter un. J'aurais pu repartir sur du CMS, mais je trouve que c'est trop lourd et quand on veut quelque chose de spécifique il faut modifier énormément de choses.

En tout cas merci pour vos réponses, ça me permet d'y voir plus clair.

edit : faut-il préférer cakePHP ou Zend ? Je pose la question, car je me suis aperçu que Zend était installé par défaut sur ma Squeeze avec Suhosin..
Avatar de Djakisback Djakisback - Membre émérite https://www.developpez.com
le 15/02/2014 à 16:55
Pour revenir sur la sécurité, le problème avec les CMS c'est que quand des failles sont trouvées, elles sont publiées et conduisent souvent à des campagnes de hack automatisées (c'est assez simple d'automatiser la détection d'un CMS et de sa version).
Du coup les mises à jour de sécurité + copie de sauvegarde des sites deviennent extrêmement importantes. Si tu gères plusieurs sites dont des sites sous Drupal, Joomla, Wordpress, etc. A raison de 2 ou 3 màj de sécu par an des core + les màj des plugins/composants ça représente une masse de temps non négligeable. Certains diront que c'est un avantage car ça permet de facturer des tâches supplémentaires, personnellement je trouve ces tâches inintéressantes et pouvant être pas mal stressantes (perte de config personnalisée, etc.).

Avec du code maison, même s'il est possible que la sécurité soit moins fiable, il y a a priori moins de chances de se faire hacker.

J'ai souvent pris un peu de temps pour réinventer la roue et dans la majeure partie des cas ça a été payant (niveau perfs, sécu ou encore temps de dév VS temps d'apprentissage du framework/lib). Si personne n'avait réinventé la roue, on roulerait toujours avec des roues en pierre, voir ma signature
Avatar de Shinja Shinja - Membre habitué https://www.developpez.com
le 15/02/2014 à 18:08
Oui, d'ailleurs j'ai envie de dire que niveau sécurité en cas de pépin on est certainement plus apte à intervenir plutôt que devoir courir à gauche et à droite car on ne sait pas trop s'y prendre avec un CMS. Je serais quand même curieux de savoir comment il est possible de hacker un site avec un mot de passe crypté en MD5 + une phrase secrète.
Offres d'emploi IT
Architecte électronique de puissance expérimenté H/F
Safran - Ile de France - Villaroche - Réau
Spécialiste systèmes informatiques qualité et référent procédure H/F
Safran - Ile de France - Colombes (92700)
Consultant sap finance/controlling H/F
Safran - Ile de France - Vélizy-Villacoublay (78140)

Voir plus d'offres Voir la carte des offres IT
Contacter le responsable de la rubrique Accueil