sur un spip 2.0.8 svn en mutualisation (mode domaines différents), après avoir installés 3 ou 4 sites (classiquement) dans /sites, je me retrouve avec la page de config des options avancées (?exec=config_fonctions) qui fait systématiquement un time_out et ce même sans aucun plugins installé...
Quelques trifouillages du fichier /ecrire/exec/config_fonctions.php montrent que c'est l'appel à la fonction configuration_type_urls_dist() du fichier /ecrire/configuration/types_url.php qui fait planter.
Cette fonction fait un appel à un array de fichiers ayant un nom de la forme urlsXXX.php, array construit par la fonction find_all_in_path() lancée (sauvagement!) sur l'ensemble de l'arborescence du site: cf ligne 26:
foreach (find_all_in_path('', 'urls/\w+\.php$', array()) as $f) {...
Du coup c'est déja lent sur un site non-mutualisé puisque *toute* l'arborescence est scannée (sauf les reps temporaires qui semblent filtrés) mais dans le cas d'une mutualisation le piège referme ses machoires d'acier irrémédiablement: *tous* les sous-répertoires de /sites sont scannés (y compris les /sites/XXX/tmp, /sites/XXX/local, /sites/XXX/tmp/cache...).
Pour peu qu'il y ait quelques sous-sites avec le cache un peu rempli et hop! c'est soit le time-out de php soit le paramètre $maxfiles = 10000; de find_all_in_path() qui est atteint... (sans compter le truc super-louche qu'il serait possible de se retrouver avec des fichiers de définition d'urls qui proviennent du /squelettes ou /plugins d'un autre SPIP que celui en cours!)
La seule soluce à la portée immédiate du pôv webmestre de mutu (sans hacker les fichiers du core donc...) consiste donc à fixer $GLOBALS['type_urls'] dans le mes_options.php du site pour empêcher l'appel de ce find_all_in_path() toxique (cf la première ligne de configuration_type_urls_dist():
if ($GLOBALS['type_urls'] != 'page') return '';
J'imagine bien que ce scannage de la totalité des répertoires est voulu pour permettre la surcharge / l'enrichissement des définitions d'urls mais il y a peut être quelque chose à prévoir pour le cas de la mutualisation?
Vu que c'est le seul endroit de tout le core où cette fonction est appelée sur l'ensemble de l'arborescence plusieurs contournements du problème semblent possibles: modifier cette fonction ou modifier celle qui l'appelle => ça serait quoi la meilleure piste pour un éventuel patch?
Bref, en attendant, si vous avez une mutu, je vous conseille de ne pas oublier le
$GLOBALS['type_urls'] = 'propres|arbo|html|...';
dans le mes_options.php de chacun des sites...