JeuWeb - Crée ton jeu par navigateur
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 ?
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.

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
les noms de fichier dans ton code doivent etre strictement les memes que les noms de fichier sur ton disque dur...

à 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
Note

Attention, require_once et include_once sont insensibles à la casse sous les systèmes comme Windows.

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 :
<?php 
include_once "mon/chemin/toto.php";
et non
Code PHP :
<?php 
include_once "mon/chemin/Toto.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