- encoding (utf8)
- eof_ending (saut le ligne en fin de fichier)
- elseif (pas else if)
- function_call_space (espaces sur fonctions)
- function_declaration (pareil)
- function_typehint_space (pareil)
quand on demande spip.php?article6434 :
- on regarde le cache : rien en cache
- du coup on analyse l'URL : ça matche articleXXX donc on redirige vers l'article XXX
quand on demande spip.php?article6434= (noter le "=" à la fin de l'URL)
- on regarde le cache : rien en cache
- du coup on analyse l'URL : ça matche PAS articleXXX à cause du "="
- on calcule la page => pas d'id article en url ni autre => page sommaire
- on met en cache
Le coup suivant, on demande spip.php?article6434
- on regarde en cache : et là subtilité, le contexte du cache est le même que pour l'URL spip.php?article6434= :
array('article6434' => '', 'lang'=>'fr')
du coup on a bien une page en cache, on la ressort et on l'envoie. Manque de bol c'était le sommaire !
On reste compatible avec les fonctions d'urls qui referenceraient ces globales en les vidant et en homogeneisant la globale profondeur_url a l'url a decoder. Il faudrait s'abstraire de cette globale dans le decodage, mais elle est utilisee pour detecter des urls invalides en fonction du niveau d'arbo accepte ou non.
puisqu'on change de version majeure, on utilise dorenavant type-page ce qui est plus precis et devrait eviter
tout soucis a venir
Corrolairement cela casse Zv2 qu'il faut corriger en consequence.
La compat de Zv1 est maintenue par la prise en charge du define qui correspond.
On applique ce renommage a l'espace prive
Permet de passer de 914 à 140 appels dans un hit de l'accueil de l'espace privé, et de 2.6% à 0.7% du temps consommé dans le hit (pour 65 fichiers différents recherchés)
Complété par 2 commits sur extensions revisions et textwheel
+ corrige un bug sur la memorisation des echecs de charger_fonction dont on ressortait trop vite : il ne faut pas rechercher les fichiers sur le disque, mais quand meme verifier la présence des fonctions en mémoire, qui ont pu arriver par une inclusion externe.
pour un hit de l'espace prive sur la home, on passe de 1450 appels a find_in_path
a 550 environs, pour un total de 200 fichiers differents
A noter :
- charger_fonction memorise les fonctions inexistantes,
car sinon il reproduit la recherche a chaque appel de fonction inexistante
- iterateur DATA ne cherche plus de fonction table_to_array
Renommage de info_objet en objet_info et afficher_nb_objets en objet_afficher_nb pour avoir une coherence de nommage des filtres qui affichent des infos a partir d'un nom d'objet generique
La signature est quasi identique, l'argument 'statut' (incomplet) etant remplacé par l'argument explicite 'public' pour indiquer si on veut une url publique ou privee.
Au passage, on corrige donc le bug de ces fonctions qui generaient des urls publiques en 404 sur les objets publies post-dates...
Par defaut 'page' est egal au type pour les tables principales, et est vide sinon.
Pour declarer un objet sans page publique, renseigner page='' dans declarer_tables_objets_sql
Je profite de cette écriture massive pour normaliser quelque chose de trompeur lorsqu'on compare deux versions, savoir l'usage de " ou ' dans le premier argument de define et defined. Comme les chaînes entre apostrophes sont plus rapidement analysées que celles entre guillemets, je choisis l'apostrophe.
Dépot obtenu avec le script Shell:
{{{
a=$(find . -name "*.php" |grep -v extensions/ | grep -v /config/ | grep -v index.php | grep -v public.php | grep -v prive.php )
echo -n "Fichiers: "
echo $a|wc -w
for i in $a
do
sed -f ~/Sites/spip/spip.sed $i > /tmp/f.php
if diff -q $i /tmp/f.php
then
:
else
diff $i /tmp/f.php
# echo $i; php /tmp/f.php
# mv /tmp/f.php $i
fi
done
}}}
et le script Sed:
{{{
s/Copyright (c) 2001-20../Copyright (c) 2001-2011/
s,\(if [(]!*\)*\(defined* *[(]\)"\([^"]*\)"\(.*\);[[:space:]]*[#/]*.*$,\1\2'\3'\4;,
}}}
La complexite est liee a la compat ascendante, car les vieilles fonctions manipulaient directement des globales.
La fonction urls_decoder_url() de inc/urls gere donc tout cela une fois pour toute, en isolant les globales concernees (sauvegarde/restauration)
ce qui permet de l'utiliser partout sans precaution.
Un flag $assembler par defaut a false permet de distinguer l'appel principal depuis public/assembler, qui accepter une redirection brutale,
et necessite de prendre en compte les globales $_SERVER['REDIRECT_url_propre'] et $_ENV['url_propre']
Celles-ci ne sont plus videes par assembler car elles sont gerees proprement par la fonction urls_decoder_url
Il serait neanmoins plus prudent d'evacuer aussi ces arguments implicites au profit d'arguments explicites,
pour plus de clarete du code.
Si les tests sur form_hidden sont exhaustif, on ne casse rien en passant par cette fonction depuis le filtre form_hidden.
Si des cas de bugs sont remontes, il faudra completer les tests avant de corriger la fonction ou le filtre.