include soucis de majuscule / minuscule - 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 : include soucis de majuscule / minuscule (/showthread.php?tid=4706) |
include soucis de majuscule / minuscule - Ter Rowan - 05-04-2010 plop voilà, je viens de tomber sur un os avec des "include_once" de fichier de déclaration de classe le soucis j'inclus (once) divers fichiers qui chacun inclut (once) classRoot.php include_once(dirname(__FILE__).'/../partage/ClassRoot.php'); je viens de m'apercevoir que pour l'un de mes fichiers, j'avais une petite différence : include_once(dirname(__FILE__).'/../partage/classRoot.php'); le c en minuscule au lieu du majuscule alors je n'avais aucun problème sur un de mes ordinateurs et paf je fais un transfert sur un autre ordinateur et je me retrouve avec un Fatal Error de redéclaration de classe J'ai cherché longtemps en traçant tout le cheminement et il s'avère que sur ce poste si j'ai 15 include_once avec le C majuscule tout va bien (il ne charge qu'une fois le fichier) mais si le C est minuscule alors c'est le drame. Donc je me demandais... Est ce que le comportement normal est de ne pas faire de différence entre minuscule et majuscule (mon premier pc) ou au contraire, le comportement normal est de différencier les fichiers (mon second pc) Dans les deux cas, comment puis je faire pour paramétrer mes pc.. Est ce le php.ini ? etc... merci d'avance, après avoir perdu 2-3 heures pour une histoire de minuscule, je n'en peux plus ^^ RE: include soucis de majuscule / minuscule - Allwise - 05-04-2010 Windows ne fait pas la différence, linux la fait, tes postes sont sur quels OS ? Dans tous les cas, si ton fichier comporte une majuscule, tu dois l'appeler avec une majuscule dans ton code, c'est le comportement normal qui passera de partout, et qui t'évitera d'avoir ce genre de mauvaises surprises. RE: include soucis de majuscule / minuscule - Ter Rowan - 06-04-2010 (05-04-2010, 11:20 PM)Allwise a écrit : Windows ne fait pas la différence, linux la fait, tes postes sont sur quels OS ? sous windows justement c est ca le hic en fait il trouve bien le fichier avec ou sans la majuscule par contre il (php?) ne se souvient pas qu'il l a trouvé avec l'autre case :/ RE: include soucis de majuscule / minuscule - php_addict - 06-04-2010 à mon avis ce n'est pas php le probleme...c'est l'OS comme le dit Allwise les noms de fichier dans ton code doivent etre strictement les memes que les noms de fichier sur ton disque dur... RE: include soucis de majuscule / minuscule - Sephi-Chan - 06-04-2010 J'avais eu un problème de ce genre quand je codais avec CakePHP, mon installation de Mac OS X était insensible à la casse (de mon propre choix, mais je ne le ferais plus), alors que l'autre machine de test y était sensible. J'ai passé un moment à chercher la source de l'erreur (hélas, ce n'était pas dit explicitement). Depuis, je fais attention, tous mes noms de fichiers sont en minuscule. Dans Rails, il y a pas mal de méthodes d'inflections (je ne sais pas si ça se traduit littéralement ou non) dans les modules ActiveSupport::Inflector et ActiveSupport::Inflector::Inflections. Sephi-Chan RE: include soucis de majuscule / minuscule - Ter Rowan - 06-04-2010 (06-04-2010, 09:08 AM)php_addict a écrit : à mon avis ce n'est pas php le probleme...c'est l'OS comme le dit Allwise à mon sens c'est php, ça ne peut pas être l'os puisque le fichier est reconnu il suffit de faire un test : créer un fichier TOTO.php avec dedans echo "toto<br/>" faire un include_once("toto.php"); ça marche... ça affichera "toto" à la place mettre un include_once("TOTO.php"); ça marche... ça affichera "toto" si maintenant on met les deux instructions include_once("toto.php"); include_once("TOTO.php"); ca affichera soit une fois toto, soit deux fois (fonction de mes postes, à voir chez vous) si c'était un problème d'OS j'aurais un messsage d'erreur (ce que doit faire unix a priori) indiquant que "toto.php" n'existe pas. D'ailleurs si ça arrivait, ce ne serait pas un problème justement, au moins le message serait clair et résoudrait mon soucis : Je préfèrerais de loin avoir un message d'alerte/erreur m'indiquant que le fichier n'est pas strictement le bon, me permettant de corriger Or ce n'est pas le cas, au contraire sur mes deux configurations les include_once fonctionnent (au sens trouvent le fichier) la différence étant qu'ils identifient ou pas si c'est le même fichier. C'est donc pour moi un problème php RE: include soucis de majuscule / minuscule - NicoMSEvent - 06-04-2010 Moi je dis d'OS : créer un fichier TOTO.php avec dedans echo "toto<br/>" faire un include_once("toto.php"); -> trouvé si windows, absent si linux ça marche... ça affichera "toto" à la place mettre un include_once("TOTO.php"); -> ok dans les deux cas ça marche... ça affichera "toto" si maintenant on met les deux instructions include_once("toto.php"); -> affiche une fois si le fichier est trouvé (erreur si linux car le fichier est TOTO.php ) include_once("TOTO.php"); ->ne fais rien -> parce que c'est le même fichier -> include_once. pour l'avoir une seconde fois sous windows, utilise include tout court si tu avais deux fichier sous linux (toto.php et TOTO.php), il te l'afficherait 2x donc, en gros, si ça te l'affiche 2x, c'est que tu as logiquement deux fichiers présents (pas de linux ici, pas l'occasion de tester). A voir aussi si tu as dans php.ini une option pour supprimer la casse des fichiers (je n'ai rien vu de tel...) Edit : trouvé dans la doc PHP Note Attention, require_once et include_once sont insensibles à la casse sous les systèmes comme Windows. RE: include soucis de majuscule / minuscule - Ter Rowan - 06-04-2010 (06-04-2010, 12:32 PM)NicoMSEvent a écrit : Edit : trouvé dans la doc PHP bah j'ai pas de bol puisque justement j'ai cette sensibilité sur une mes machines vista, d'où mon post ^^ enfin, je crois qu'on tourne en rond, je dois avoir une installation un peu foireuse :/ RE: include soucis de majuscule / minuscule - Daynos - 07-04-2010 Par expérience, je rejoins l'avis donné plus haut : respecter scrupuleusement la casse du fichier appelé. S'il s'appelle "toto.php" tout en minuscule, tu utilises : Code PHP :
Code PHP :
A éviter (évidemment) : avoir dans le même répertoire des fichiers portant le même nom avec une casse différente, genre "toto.php" et "Toto.php". Si certains OS l'acceptent, d'autres ne l'acceptent pas du tout du tout du tout. Et quand bien même, c'est la porte ouverte à des confusions et des erreurs bêtes dures à débugger. Encore plus dans le cas d'un projet développé en équipe. Note en passant, les parenthèses sont optionnelles pour les require / include. Il existe même un cas assez particulier où leur utilisation peut nuire. Cf exemple #4 sur : http://www.php.net/manual/fr/function.include.php |