Hello,
Il y a un pb avec:
http://trac.rezo.net/trac/spip/changeset/11582/spip/ecrire/inc/utils.php
qui a introduit ce traitement dans charger_fonction:
if (!$inc = include_spip($dossier.($d = strtolower($nom))))
// si le fichier truc/machin/nom.php n'existe pas,
// la fonction peut etre definie dans truc/machin.php qui regroupe plusieurs petites fonctions
include_spip(substr($dossier,0,-1));
le pb est que si on fait charger_fonction('truc', 'public') et que public/truc.php n'existe pas, le code ci-dessus va tester s'il existe public.php. Or celui-ci existe de notoriété publique (éh éh), puisque c'est le synonyme du index.php, et paf on se prend la page sommaire du site en retour, tout ce qui était en cours étant abandonné!
Il y a plusieurs remèdes:
1. renoncer à 11582
2. renommer public.php
3. renommer ecrire/public/
Je n'ai jamais compris pouquoi le répertoire "public" s'appelle ainsi, puisqu'il contient le compilateur qui depuis longtemps ne s'applique plus seulement à l'espace public. La méthode 3 semble donc la plus souhaitable.
Committo,Ergo:Sum
Avis à part : Je crois que l’on ne pouvait renommer dist/ en public/ comme prive/ car il pouvait y avoir confusion avec ecrire/public…
Donc je pense que renommer ecrire/public serait bien et ça permettrait de renommer squelettes-dist/ en public/, ça serait un peu mieux niveau compréhension pour les bidouilleurs…
1. renoncer à 11582
ou l'améliorer
2. renommer public.php
bof
3. renommer ecrire/public/
et pêter les 47 plugins qui l'utilisent ? non merci
je vote 1+
-- Fil
1. renoncer à 11582
ou l'améliorer
comment ?
L'usage est essentiellement pour CVT, on peut le restreindre à ce
cas-là, par exemple. Attendons voir ce qu'en dit Cédric.
-- Fil
Il y a plusieurs remèdes:
1. renoncer à 11582
2. renommer public.php
3. renommer ecrire/public/
Je n'ai jamais compris pouquoi le répertoire "public" s'appelle ainsi, puisqu'il contient le compilateur qui depuis longtemps ne s'applique plus seulement à l'espace public. La méthode 3 semble donc la plus souhaitable.
Il faudrait faire un inventaire exact, mais je pense que c'est encore un peu tôt pour le renommer sans rien casser, car il y a encore des surcharges dans la nature. Par ailleurs, renomer le dossier public/ du core ne résoudra pas la question dans la mesure ou un dossier public/ subsistera dans de nombreux plugins, et par la même suceptible de provoquer le bug.
Quand a renoncer a 11582, cela casserait tous les CVT que l'on a remonté du 4ème sous sol au 3ème par ce moyen.
Moi je suis aussi pour améliorer 11582 avec le patch suivant, qui exclu public.php et prive.php (puisqu'on a aussi un dossier prive/).
Index: inc/utils.php
renomer le dossier public/ du core ne résoudra pas la question dans la mesure ou un dossier public/ subsistera dans de nombreux plugins, et par la même suceptible de provoquer le bug.$
Avoir le même nom pour désigner un script et un répertoire qui ne sont pas vraiment liés, m'a toujours paru confusionnant (c'est valable pour "public" et aussi pour "prive" comme tu dis). Avec l'ajout de 11582, la confusion devient électronique. Les deux scripts jouent en fait le rôle d'un index.php spécialisé, il me semble qu'il faudrait les renommer avec le mot "index" dedans: index_public.php et index_auth.php ou qqch du genre, ce serait plus clair à mon avis.
Quand a renoncer a 11582, cela casserait tous les CVT que l'on a remonté du 4ème sous sol au 3ème par ce moyen.
s'ils sont encore au 3e, ne peut-on limiter 11582 à lui ? S'il y a un / dans $dossier, on applique, sinon non.
Moi je suis aussi pour améliorer 11582 avec le patch suivant
+ AND !in_array(basename($dossier),array('public','prive')))
une exception à traiter dans une fonction aussi centrale, beuh...
Committo,Ergo:Sum
oui bonne idée, c'est le mieux, et c'est ce qui était annoncé dans 11582 qui plus est.
http://zone.spip.org/trac/spip/changeset/14008
corrige donc cela
Cédric
ok, mais ceci me parait un peu plus efficace:
if (strpos($dossier, '/') !== strlen($dossier)-1)
include_spip(substr($dossier,0,-1));
Committo,Ergo:Sum