http://mawel.free.fr : Site d'informations pratiques
pour la mise en place de sites
dynamiques en php
--> Accueil <--  > Résoudre un problème
> Tutoriels
   Erreurs courantes
   Saisie de texte riche
   Structure de données
   Ajout/Modif/Suppression
   Résoudre un problème
   Soumission de données
   Pseudo-templates
   Enregistrement de fichiers
   Liens relatifs


> Cours
   1. Structure de site



Contact
   Votre avis
   e-mail



Liens
   Inventons!
  

Introduction

Ce document a pour objectif d'aider toutes les personnes qui rencontrent un problèmes dans la conception, le développement ou la mise en production d'un site web reposant sur php.

Très concrétement il s'agit d'expliciter comment :
  • Définir précisément le périmétre du problème
  • Trouver quelles sources d'informations qui vont apporter les réponses
  • Utiliser la réponse fournie

Définir le périmétre du problème

La définition du périmétre est l'un des choses les plus importantes, c'est ce qui va permette de déterminer dans quelle direction chercher la solution.

Il convient tout d'abord de savoir dans quel phase du projet on se situe :
  1. La conception, phase durant laquelle on examine comment on va faire les choses, si on les fait soi-même ou si on récupére un script etc...
  2. Le développement, phase durant laquelle on transpose en code php ce qui a été décidé durant la phase précédente
  3. La mise en ligne, phase durant laquelle on place sur le serveur de production les éléments développées.

Avant de commencer... soi-même

Avant de tenter de définir des moyens pour trouver plus vite des solution, un tout petit rappel : toujours essayer de se situer soi-même par rapport à ce que l'on souhaite faire, et par rapport a ce qui existe.

Ainsi, si l'on débute, commencer d'abord par bien regarder les tutoriaux avant d'aller sur un forum...

Problèmes a la conception

L'étape de conception est très importante, puisque c'est de la qualité de la conception que va directement découler la compexité du développement. Plus la conception est étudiée, plus le développement sera ensuite simplifié.

Les problèmes de conception sont des questions du type "Comment faire pour" :
  • générer des images, des pdf, des graphiques etc...
  • gérer les liens, les images
  • gérer les utilisateurs
La plupart de ces questions trouvent leurs réponse dans les tutoriels des différents sites, ou parfois dans les sites de scripts.

On trouve les tutoriels dans deux genres de sites web :
  • Les portails, du type "phpindex", "phpinfo", ainsi que "phpdebutant", qui proposent en plus de nombreuses rubriques, et centralisent les tutoriels écrits par différentes personnes, ils disposent pour la plupart d'un moteur de recherche interne
  • Les sites plus ou moins "page perso" (comme celui-ci) dans lesquels une ou quelques personnes écrivent des articles sur des sujets spécifiques, on les trouve par le biais des moteurs de recherche internet.
Ces deux catégories offrent des articles intéressants, souvent de grande qualité, même si les solutions qu'ils proposent peuvent sembler s'opposer.

Très concrétement, pour chercher une réponse a un problème du type :
"Comment génerer des pdf avec php".


1. Aller sur l'un des sites : phpindex, phpinfo ou phpscript, dans le moteur de recherche, saisir : "pdf".
on obtient déjà des résultats intéressants, par exemple :
C'est, pour la requête spécifiée, phpindex qui donne le plus de résultats, mais surtout, qui donne les résultats les plus intéressants. Au passage, phpindex propose de voir l'url a laquelle on accède, par exemple : "http://www.phpindex.com/articles/article...", ce qui permet de savoir quel genre d'information on va trouver.

Ici, on a un article : JDNet: des documents PDF à la volée en PHP de phpindex qui renvoie sur un autre du journal du net qui propose déjà une réponse intéressante.

2. Si rien n'est trouvé de satisfaisant, on peut tenter sa chance du coté des moteurs de recherche internet. Attention, dans la mesure ou l'on sort alors du contexte "php", il va falloir le préciser a chaque fois.

Par exemple, sur google, rechercher : generer des pdf php. On remarque au passage que l'on revient parfois sur des pages de phpinfo ou phpindex.

3. S'il n'y a toujours rien de satisfaisant, il faut alors penser a utiliser les forums php qui existent un peu partout.

Attention avant d'utiliser ce genre de forums :
  1. Toujours commencer par faire une recherche dans les précédents post, pour éviter de poser une question déjà posée plusieurs fois
  2. Toujours lire la charte du forum lorsqu'elle existe, afin de respecter au maximum les autres utilisateur.
  3. Regarder les temps de réponses moyens du forum, pour savoir s'il peut fournir une réponse intéressante dans des délais compatibles aux besoins
  4. Poser sa question de la manière la plus ouverte et précise possible. Par exemple "Bonjour, je cherche des informations pour générer des pdfs (pour faire des factures) avec php, auriez-vous des indication, ou l'adresse d'un bon tutoriel sur le sujet". En demandant un toturiel, on montre que l'on ne veut pas du "tout cuit", mais que l'on a juste des difficultées pour trouver l'information. Evidement, si quelqu'un a un script tout cuit, cela ne sera pas de refus non plus. Si l'on a déjà trouvé des tutoriels, mais que l'on ne les a pas compris, ne pas hésiter a le dire.
Evidement, éviter de poser la même question en même temps dans plusieurs forums... et... penser a remercier celui ou celle qui a répondu.

Si au passage on a le temps d'aider quelques personnes, c'est l'idéal.


Enfin, une petite astuce pour chercher rapidement de l'information dans des grandes pages de texte : utiliser le "Ctrl-F" (sous IE PC), qui permet de chercher un mot dans la page courante. On gagne alors un temps précieux si les pages contiennent beaucoup de texte.

Problèmes au développement

Les problèmes au développement sont de plusieurs natures :
  • Recherche d'une fonction particulière
  • Recherche d'un algorithme pour accomplir une action
  • Faire fonctionner un script qui ne veut pas, pour une raison qu'on ne comprend pas.

    - Rechercher une fonction/une syntaxe

La documentation php est l'outil le plus adapté pour rechercher une fonction. Elle est disponible sous deux formes :
  • en ligne et en français sur le site officiel : http://www.php.net. C'est l'outil le plus pratique lorsque l'on est connecté. Toute la documentation est annotée d'exemple, avec parfois des commentaires d'utilisateurs, qui sont souvent très pratiques.
  • en version téléchargeable (sur le même site), si l'on n'est pas connecté en permanence. A noter qu'une fois téléchargée, on peut effectuer des recherches avec l'outil de recherche de fichier de windows, "Tous les fichiers contenant ...".
La documentation php contient la totalité des fonctions utilisées. Elle est particulierement bien conçue, et permet de résoudre 99% des problèmes de fonctions. A tel point qu'il peut être très intéressant de la lire de temps en temps en prennant une page au hasard, on peut découvrir des fonctions que l'on ne soupçonne pas d'exister.

Enfin, les pages de la documentation renvoient souvent a d'autres fonctions, ne pas hésiter a jeter un oeuil au cas ou, cela peut s'averer utile par la suite.

Pour exemple, voici ce que nous fournit la documentation concernant les pdf : http://www.php.net/manual/fr/ref.pdf.php

Pour conclure, phpindex propose aussi une documentation très intéressante, puisqu'expurgée de pas mal de détails qui rendent la documentation officielle un peu trop volumineuse.

Si l'on ne trouve pas son bonheur, les forums sont souvent d'un grand secourt. Comme dit précédement, lire la charte au préalable, puis demander précisément, par exemple : "Je cherche une fonction pour faire .... j'ai beau chercher dans la documentation php, je n'arrive pas a trouver mon bonheur".

    - Rechercher un algorithme

Pour rappel, un algorithme est un genre de "recette" pour répondre a un cas spécifique, on a par exemple des algorithmes de tris, de gestion de données, etc..

C'est typiquement le genre de problèmatique qui nécessite d'avoir recourt a un forum (accessoirement, c'est aussi le genre de question les mieux accueillies, si la réponse n'est pas évidente).

Dans la question, il faut :
  • Préciser le contexte (éventuellement dans le titre) : "réalisation d'un panier d'achat"
  • Préciser le point qui pose problème : "trier les articles dans le panier", "présenter les catégories d'article"
  • Eventuellement, décrire la méthode que l'on a tenté même si elle ne fonctionne pas, pour la même raison que précédement, cela indique que l'on au moins tenté de faire quelque chose. Sinon, préciser que l'on voudrait surtout savoir par quel bout prendre le problème.
Evidement, il est inutile de rappeler qu'il faut toujours rechercher dans le forum si la question n'a pas déjà été posée...

    - Faire fonctionner un script qui "plante"

Cela arrive parfois, impossible de trouver pourquoi ce script ne veut pas fonctionner ! On n'obtient qu'un message d'erreur vaguement comprehensible.

Si il y a un message d'erreur, essayer de comprendre ce qu'il peut vouloir dire, même si c'est en anglais, on comprend toujours au moins quelques mots. Les messages d'erreurs php sont composés de la manière suivante :
Le type d'erreur rencontré : Le texte de l'erreur, le fichier contenant l'erreur, la ligne contenant l'erreur.

Par exemple :
Parse error: parse error, expecting `T_VARIABLE' or `'$'' in e:\program files\apache group\apache\htdocs\sms\test.php on line 2

Qui signigie : erreur d'analyse (parse) du script test.php a la ligne 2, "expecting `T_VARIABLE' or `'$''".

Même si l'on ne comprend pas ce que peut vouloir dire "expecting `T_VARIABLE' or `'$''", le premier reflexe doit être d'aller voir ce qui se trouve à la ligne 2 du fichier concerné, puis de regarder la ligne, ainsi que celles qui se trouvent au dessus. Attention, beaucoup d'erreur sont liées a des oublis de ";" en fin de ligne précédent celle indiquée par php, elles provoquent des messages pas toujours très clairs (comme celui ci-dessus).

Si l'erreur n'est pas évidente, on peut utilise les moteurs de recherche des forums, ou les moteurs de recherche internet, en cherchant sur le descriptif de l'erreur, ici "parse error, expecting `T_VARIABLE' or `'$''", voire sur un bout seulement de la chaine : "parse error, expecting".

Enfin, la documentation php est aussi précieuse, toujours en cherchant sur un morceau de la chaine d'erreur renvoyée, car elle indique souvent ce qui peut en être la cause.

Si rien n'y fait, il ne reste plus qu'a aller sur les forums. Attention, les erreurs de syntaxes ne sont que modérement appréciées. Donc, bien le préciser dans le titre, par exemple :
Titre : "Syntaxe : Parse error"
Contenu : "J'ai un problème dans mon script, php me renvoie :
Parse error: parse error, expecting `T_VARIABLE' or `'$'' in e:\program files\apache group\apache\htdocs\sms\test.php on line 2
(toujours placer l'erreur exacte !)

Mon script se présente comme ça :
placer 3 ou 4 lignes de script JAMAIS PLUS en précisant quelle est la ligne 2.



    - Faire fonctionner un script qui ne fait pas ce que l'on souhaite.

Enfin, dernier soucis du développeur, les scripts qui ne font pas ce que l'on souhaite, sans que l'on puisse comprendre pourquoi ! Le script ne fait rien, ou alors a un comportement totalement erratique.

Dans ce cas, toujours se souvenir d'une chose : "le script ne fait rien d'autre que ce que l'on lui a demandé". L'erreur ne peut provenir que du développeur !

Il faut alors user, voire même abuser des instructions permettant d'y voir plus clair :
  • echo, qui permet de voir par ou passe le script. Un simple "echo "ok"" permet de savoir que le script passe ou pas par un endroit.
  • echo "#", $Var, "#", qui permet de voir la valeur d'une variable. Les "#" sont très utiles, car ils permettent de voir si la variables est ou non suivie/précédée d'espaces
  • var_dump($NomTableau ou $NomObjet), est l'arme absolue dès que l'on manipule des objets un peu complexe. Il permet de voir très précisément le type de la variable ainsi que les éléments qu'elle contient
  • et enfin phpinfo(), que l'on ne présente plus, et qui permet d'afficher l'ensemble des informations sur le script en cours.
Pour ce genre d'erreur, mieux vaut éviter de poster dans un forum sans avoir copieusement ajouté des "echo", "var_dump" et autres fonctions. Si malgrès tout rien n'y fait, poster dans le forum en fournissant un maximum d'indications, et en plaçant le minimum de code possible.

Par exemple :
Sujet : "Impossible de trier"
Contenu : "J'ai un soucis avec le script suivant pour effectuer des tris, parce que.. les résultats ne sont pas triés, ...
ensuite, placer le code, et commenter le cas échéant les lignes.".


Dans tous les cas, bannir la formule "Ca ne marche pas : il ne s'affiche rien", qui n'aide pas du tout celui qui veut répondre. Au minimum, placer un "echo "OK"" dans le script qui montre qu'on passe bien a l'intérieur.

Problèmes a la mise en ligne/pendant la vie du script

Enfin, dernière catégorie de problèmes, ceux qui surviennent tout d'un coup, sur un script qui fonctionnait précédement, ou lors du transfert du site sur une autre machine.

La cause peut être :
  • Externe au script : une modification des paramètres de la machine, ou entre les deux machines
  • Interne au script : un script qui ne fonctionne que dans un environnement trop restreint.
Dans le premier cas, il convient de vérifier quelles sont les différences entre les deux machines. Pour cela, rien de tel qu'un phpinfo(), qui permet de visualiser l'ensemble des caractéristiques des machines. Un détail tout simple, comme l'installation d'une nouvelle version de php peut modifier une valeur du php.ini, et provoquer un plantage d'un script (par exemple a cause des "magic-quotes" ou du "register-global").

Souvent, c'est une extension php qui n'est installée que sur l'une des machines, ou qui a été supprimée...

Dans le second cas, le problème est directement lié a la conception du script. L'exemple le plus connu est celui du passage a l'an 2000, avec des dates codées sur 2 chiffres. Si rien n'avait été fait, tous les programmes se seraient subitement arretés le 1er janvier 2000, alors que rien n'était modifié.

Dans tous les cas de scripts qui s'arretent de fonctionner, ou qui ne fonctionnent que sur une machine, il convient d'examiner tout ce qui a pu se produire entre les deux états :
  • Au niveau des dates, grosse source d'erreur (changement d'année ou de mois, modification des paramétres de la machine : date US/date FR)
  • Au niveau des machines elles mêmes : passage de NT vers Linux, d'ou des problèmes sur la casse des noms de fichiers
  • Au niveau des données : reste-t-il de la place pour enregistrer les données dans la base/le format de données choisi permet-il de placer les données..?
Pour ce genre d'erreur, il faut, quand on doit finalement soumettre le question a un forum, préciser :
  • le type de script (son objectif)
  • Le système d'exploitation
  • Le serveur utilisé / MySql
  • L'erreur qu'il se produit.
Par exemple :
Bonjour, j'ai un soucis avec mon script de sondage. Il tourne correctement chez moi (Win NT, Apache, PHP4, MySql) mais plante chez mon hébergeur (préciser l'hébergeur), avec l'erreur suivante : (recopier le message d'erreur).


Comme partout ailleurs, bannir le "il ne se passe rien".

Conclusion

La capacité a résoudre rapidement les problèmes réprésente le gains de temps le plus important dans un développement. La seule différence entre le développeur confirmé et le débutant, c'est que le confirmé sait ou chercher quand il rencontre un problème.

C'est ainsi, et uniquement ainsi qu'il parvient a développer beaucoup plus rapidement.

On le voit, lorsque la situation devient inextricable, il faut toujours faire appel aux forums, sans hésiter. Ils fournissent quasiment toujours des solutions, mais seulement si le problème est bien présenté, et si celui qui le pose respecte les règles élémentaires de politesse.